INSERT...ON DUPLICATE KEY UPDATE を使用した複数の列での UPSERT の実行
UPSERT 操作を実行するには (新しい行を挿入するか、既存の行を更新します)行)、更新部分に新しい値と既存の値の両方を収容しながら、INSERT...ON DUPLICATE KEY UPDATE 文がよく使われます。この手法を使用すると、指定された主キーを持つレコードが存在するかどうかに基づいて、さまざまなシナリオを処理できます。
簡単な例
列がItem_NameであるItemという名前のテーブルを考えてみましょう。 (主キー) と在庫数を含む Items_In_Stock。アイテムを受け取るとき、次のロジックが適用されます:
単純なアプローチでは、UPDATE 部分で複数の SELECT ステートメントを使用して取得します。次の例のように、既存のカウント:
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')
改善された解決策
ただし、このアプローチは必要以上に複雑になる可能性があります。 PostgreSQL では、ON DUPLICATE KEY 条件をトリガーした行の値を UPDATE 句で直接参照できます。したがって、次のようにステートメントを簡略化できます。
INSERT INTO `item` (`item_name`, items_in_stock) VALUES( 'A', 27) ON DUPLICATE KEY UPDATE `new_items_count` = `new_items_count` + 27
この最適化されたステートメントにより、追加の SELECT クエリのオーバーヘッドが回避され、コードがより簡潔でエレガントになります。
以上がSQL で複数の列を使用して UPSERT 操作を効率的に実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。