ホームページ > データベース > mysql チュートリアル > SQL で複数の列を使用して UPSERT 操作を効率的に実行するにはどうすればよいですか?

SQL で複数の列を使用して UPSERT 操作を効率的に実行するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-10 20:29:14
オリジナル
375 人が閲覧しました

How Can I Efficiently Perform UPSERT Operations with Multiple Columns in SQL?

INSERT...ON DUPLICATE KEY UPDATE を使用した複数の列での UPSERT の実行

UPSERT 操作を実行するには (新しい行を挿入するか、既存の行を更新します)行)、更新部分に新しい値と既存の値の両方を収容しながら、INSERT...ON DUPLICATE KEY UPDATE 文がよく使われます。この手法を使用すると、指定された主キーを持つレコードが存在するかどうかに基づいて、さまざまなシナリオを処理できます。

簡単な例

列がItem_NameであるItemという名前のテーブルを考えてみましょう。 (主キー) と在庫数を含む Items_In_Stock。アイテムを受け取るとき、次のロジックが適用されます:

  • アイテムが存在しない場合は、指定された数量で新しいレコードを挿入します。
  • アイテムが存在する場合は、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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート