1. ホーム
  2. mysql

[解決済み] UPSERTを実行して、更新部分で新しい値と古い値の両方を使用する方法

2022-03-06 05:33:12

質問

くだらないけど、簡単な例。 私が受け取るアイテムの合計を保持するテーブル 'アイテム'を持っていると仮定します。

Item_Name              Items_In_Stock

ここでは品名が主キーです。数量Xの商品Aを受け取った場合、どのようにすれば以下のようになります。

アイテムが存在しない場合、私はアイテムAの新しいレコードを挿入し、在庫アイテムをXに設定し、在庫アイテムがYであるレコードが存在する場合、在庫アイテムの新しい値は(X + Y)です。

INSERT INTO `item`
(`item_name`, items_in_stock)
VALUES( 'A', 27)
ON DUPLICATE KEY UPDATE
`new_items_count` = 27 + (SELECT items_in_stock where item_name = 'A' )

私の問題は、実際のテーブルに複数のカラムがあることです。更新部分で複数のselect文を書くのは良いアイデアでしょうか?

もちろん、コードでできるのですが、もっといい方法はないでしょうか?

どのように解決するのですか?

コメントにあるように、ON DUPLICATE KEYが発生した行を参照するためにサブセレクトを行う必要はないです。ですから、あなたの例では、次のように使うことができます。

INSERT INTO `item`
(`item_name`, items_in_stock)
VALUES( 'A', 27)
ON DUPLICATE KEY UPDATE
`new_items_count` = `new_items_count` + 27

ほとんどのことは本当にシンプルだということを忘れないでください。もし、シンプルであるべきものを複雑にしすぎている自分に気づいたら、それは間違った方法である可能性が高いのです :)