ホームページ >データベース >mysql チュートリアル >あるテーブルの列の値を別のテーブルの値に基づいて更新するにはどうすればよいですか?
別のテーブルのデータを使用してテーブル列を更新する
このガイドでは、両方のテーブルが一致するレコードの共通フィールドを共有していることを前提として、あるデータベース テーブルの列値を別のデータベース テーブルのデータを使用して更新する方法を説明します。 同様の構造を持つ 2 つのテーブル tableA
と tableB
を考えてみましょう。
id | name | value |
---|---|---|
1 | Joe | 22 |
2 | Derk | 30 |
私たちの目標は、value
の tableB
列を tableA
の対応する値で更新し、name
列に基づいて行を照合することです。
方法 1: サブクエリを使用する
最も簡単なアプローチには、サブクエリを含む UPDATE
ステートメントが含まれます。
<code class="language-sql">UPDATE tableB SET value = (SELECT value FROM tableA WHERE tableA.name = tableB.name) WHERE EXISTS (SELECT 1 FROM tableA WHERE tableA.name = tableB.name);</code>
このステートメントは、tableB.value
フィールドが一致する value
の tableA
で name
を更新します。 WHERE EXISTS
句は、両方のテーブルで名前が一致する行のみが更新されるようにし、名前が tableB
には存在するが tableA
には存在しない場合のエラーを防ぎます。
方法 2: JOIN を使用する
より柔軟な方法では、効率的なマッチングのために INNER JOIN
を使用します。
<code class="language-sql">UPDATE tableB INNER JOIN tableA ON tableB.name = tableA.name SET tableB.value = tableA.value;</code>
このアプローチでは、tableB
列で tableA
と name
を直接結合し、一致する行ごとに tableB.value
を tableA.value
で更新します。 これは通常、サブクエリを使用するよりも高速です。
方法 3: JOIN による条件付き更新
特定の状況下でのみ更新する条件付き更新の場合は、IF
句内で CASE
または SET
ステートメントを使用します。
<code class="language-sql">UPDATE tableB INNER JOIN tableA ON tableB.name = tableA.name SET tableB.value = IF(tableA.value > 0, tableA.value, tableB.value) WHERE tableA.name = 'Joe';</code>
この例では、tableB.value
が 0 より大きい場合にのみ、tableA.value
が 'Joe' である行に対してのみ tableA.name
を更新します。 IF
または CASE
条件を特定の要件に合わせて調整できます。 'Joe'
をユースケースに適した条件に置き換えてください。
ニーズに最も適した方法を選択してください。 一般に、方法 2 (JOIN
を使用) は効率性と読みやすさの点で好まれますが、方法 3 は更新プロセスをより詳細に制御できます。 UPDATE
ステートメントを実行する前に、必ずデータをバックアップしてください。
以上があるテーブルの列の値を別のテーブルの値に基づいて更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。