ホームページ >データベース >mysql チュートリアル >一致するユーザー名に基づいて SQL テーブル間でデータを効率的にコピーするにはどうすればよいですか?
一致するユーザー名を使用した SQL テーブル間でのデータの効率的な転送
データベースには table_a
と table_b
という 2 つのテーブルが含まれており、それぞれに user_name
列があります。 目的は、column_b_1
の column_b_2
と table_b
から column_a_1
の column_a_2
と table_a
にそれぞれデータをコピーし、同一の user_name
値に基づいて行を照合することです。
最適なパフォーマンスを実現するために適切なインデックスが配置されていると仮定すると、単一の SQL ステートメントでこれを実現できます。
<code class="language-sql">UPDATE table_a SET column_a_1 = (SELECT b.column_b_1 FROM table_b b WHERE b.user_name = table_a.user_name), column_a_2 = (SELECT b.column_b_2 FROM table_b b WHERE b.user_name = table_a.user_name) WHERE EXISTS (SELECT 1 FROM table_b b WHERE b.user_name = table_a.user_name);</code>
このクエリは相関サブクエリを使用して、table_b
の各行について table_a
から正しい値をフェッチします。 EXISTS
サブクエリにより、両方のテーブルに存在するユーザー名に対してのみ更新が行われるようになります。
パフォーマンスが重要な非常に大規模なデータセットの場合は、次の代替戦略を検討してください。
JOIN
を使用して一時テーブルを構築し、table_a
と table_b
の関連する行を結合します。table_a
から既存のデータを削除します。table_a
に挿入します。この方法にはより多くのステップが含まれますが、多くの場合、広範なデータセットで優れたパフォーマンスを実現します。
以上が一致するユーザー名に基づいて SQL テーブル間でデータを効率的にコピーするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。