ホームページ >データベース >mysql チュートリアル >あるテーブルの列の値を別のテーブルの値に基づいて更新するにはどうすればよいですか?

あるテーブルの列の値を別のテーブルの値に基づいて更新するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-17 04:57:10906ブラウズ

How Can I Update Column Values in One Table Based on Values from Another Table?

別のテーブルのデータを使用してテーブル列を更新する

このガイドでは、両方のテーブルが一致するレコードの共通フィールドを共有していることを前提として、あるデータベース テーブルの列値を別のデータベース テーブルのデータを使用して更新する方法を説明します。 同様の構造を持つ 2 つのテーブル tableAtableB を考えてみましょう。

id name value
1 Joe 22
2 Derk 30

私たちの目標は、valuetableB 列を 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 フィールドが一致する valuetableAname を更新します。 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 列で tableAname を直接結合し、一致する行ごとに tableB.valuetableA.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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。