ホームページ >データベース >mysql チュートリアル >自己結合を使用してテーブル内のデータをコピーするにはどうすればよいですか?

自己結合を使用してテーブル内のデータをコピーするにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-20 11:29:02877ブラウズ

How to Copy Data Within a Table Using Self-Join?

テーブル内のデータのコピー

リレーショナル データベースでは、同じテーブル内のある行から別の行にデータをコピーすると便利なことがよくあります。この記事では、同じテーブル内の別の行のデータを使用して行の値を更新する方法について説明します。

次の構造を持つテーブルを考えます。

ID NAME VALUE
1 Test VALUE1
2 Test2 VALUE2
1 Test2
4 Test
1 Test3 VALUE3

目標は、 「VALUE」列に値が欠落している行の値を取得するには、同じ「NAME」を持つ別の行から値をフェッチします。期待される出力:

ID NAME VALUE
1 Test VALUE1
2 Test2 VALUE2
1 Test2 VALUE2
4 Test VALUE1
1 Test3 VALUE3

この解決策には自己結合が含まれます。一時テーブルを使用して null 以外の行のみを保存すると、元のテーブルを更新できます。

UPDATE data_table t, (SELECT DISTINCT ID, NAME, VALUE
                        FROM data_table
                       WHERE VALUE IS NOT NULL AND VALUE != '') t1
   SET t.VALUE = t1.VALUE
 WHERE t.ID = t1.ID
   AND t.NAME = t1.NAME

説明:

  • サブクエリ (SELECT) DISTINCT ID、NAME、VALUE...) は、null 以外の値のみを含む一時テーブル t1 を作成します。
  • UPDATE ステートメントは、ID 列と NAME 列で t と t1 を結合します。
  • 値が一致し、t の VALUE 列が null の場合、t の対応する VALUE で更新されます。 t1.

更新クエリ:

提供されたソリューションは、目的の出力を達成するために調整できます:

UPDATE data_table dt1, data_table dt2 
SET dt1.VALUE = dt2.VALUE 
WHERE dt1.NAME = dt2.NAME AND dt1.VALUE = '' AND dt2.VALUE != '' 

以上が自己結合を使用してテーブル内のデータをコピーするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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