[解決済み] 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
ほとんどのことは本当にシンプルだということを忘れないでください。もし、シンプルであるべきものを複雑にしすぎている自分に気づいたら、それは間違った方法である可能性が高いのです :)
関連
-
[解決済み】MySQLのDESCRIBE [table]に相当するSQLiteはあるか?]
-
[解決済み】MySQLのforeachループ
-
[解決済み] JDBC経由でMySQLにUTF-8を挿入しようとすると、"不正な文字列値 "と表示される?
-
[解決済み] 日付の挿入時にエラーが発生しました - 日付の値が正しくありません。
-
[解決済み] MySQLの更新datetimeフィールド
-
[解決済み] SQLite - UPSERT *not* INSERT or REPLACE
-
[解決済み】INSERT IF NOT EXISTS ELSE UPDATE?
-
[解決済み】オラクル:UPSERTする方法(テーブルへの更新または挿入?)
-
[解決済み] PostgreSQLのINSERT ON CONFLICT UPDATE(upsert)は除外された値をすべて使用します。
-
[解決済み】PostgreSQLでUPSERT(MERGE、INSERT ... ON DUPLICATE UPDATE)する方法とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】mysql 外部キー制約が不正に形成されているエラー
-
[解決済み】MySQLユーザーDBにパスワードカラムがない - OSXへのMySQLインストール
-
[解決済み】カラムのデータが切り捨てられた?
-
[解決済み】Fatal error: mysqldをrootで実行する方法は、マニュアルの「セキュリティ」セクションをお読みください。
-
[解決済み] SQLZOO - select from world チュートリアル #13
-
[解決済み] テーブル 'performance_schema.session_variables' は存在しません。
-
[解決済み] mysql 拡張は非推奨で、将来的に削除されます: 代わりに mysqli か PDO を使ってください [重複] 。
-
[解決済み] whereステートメントによるmysqlの一括更新
-
[解決済み] #1136 - 列数が 1 行目の値数と一致しません。
-
[解決済み] 「他のデータベースへのクエリを無視する」コマンドライン