web-dev-qa-db-ja.com

別のテーブル値に基づくMySQL更新テーブル

2つのテーブルがありますが、

これが私の最初のテーブルです

ID      SUBST_ID        CREATED_ID
1       031938          TEST123
2       930111          COOL123
3       000391          THIS109
4       039301          BRO1011
5       123456          COOL938
...     ...             ...

これは私の2番目のテーブルです。

ID      SERIAL_ID       BRANCH_ID
1       039301          NULL
2       000391          NULL
3       123456          NULL
...     ...             ...

最初のテーブルのデータを使用して、2番目のテーブル内のすべての行を更新する方法が必要です。

これをすべて1つの更新クエリで実行する必要があります。

SUBST_IDとSERIAL_IDの両方が一致するため、最初のテーブルからcreated_idを取得し、2番目のテーブルに挿入する必要があります。

したがって、2番目のテーブルは次のようになります。

ID      SERIAL_ID       BRANCH_ID
1       039301          BRO1011
2       000391          THIS109
3       123456          COOL938
...     ...             ...

あなたの助けとガイダンスをありがとう。

51
verheesj
UPDATE TABLE2
       JOIN TABLE1
       ON TABLE2.SERIAL_ID = TABLE1.SUBST_ID
SET    TABLE2.BRANCH_ID = TABLE1.CREATED_ID;
115
Tom

操作を頻繁に繰り返すが必要で、時間を節約するが必要な場合のトムの答えに加えて、次のことができます。

UPDATE TABLE1
       JOIN TABLE2
       ON TABLE1.SUBST_ID = TABLE2.SERIAL_ID
SET    TABLE2.BRANCH_ID = TABLE1.CREATED_ID
WHERE TABLE2.BRANCH_ID IS NULL
17
RafaSashi

これはうまくいくと思う

UPDATE secondTable
JOIN firsTable ON secondTable.SERIAL_ID = firsTable.SUBST_ID
SET BRANCH_ID = CREATED_ID
3
Gonzalo.-
UPDATE TABLE2
       JOIN TABLE1
       ON TABLE1.SUBST_ID = TABLE2.SERIAL_ID
SET    TABLE2.BRANCH_ID = TABLE1.CREATED_ID 
WHERE TABLE2.BRANCH_ID IS NULL or TABLE2.BRANCH_ID='';
2
Mohammad Imran

INNER JOINを使用:

UPDATE TABLE1
INNER JOIN TABLE2 ON TABLE1.SUBST_ID = TABLE2.SERIAL_ID
SET TABLE2.BRANCH_ID = TABLE1.CREATED_ID;

以下のような別の代替ソリューション:ここでは、WHEREの代わりにJOIN句を使用しています

UPDATE 
    TABLE1,
    TABLE2
WHERE
    TABLE1.SUBST_ID = TABLE2.SERIAL_ID
SET 
    TABLE2.BRANCH_ID = TABLE1.CREATED_ID;
0
Faisal

これも使用できます。

update TABLE1 set BRANCH_ID = ( select BRANCH_ID from TABLE2 where TABLE1.SUBST_ID = TABLE2.SERIAL_ID)

しかし、私の経験では、この方法は非常に遅く、お勧めしません!

0
Abadis