1. ホーム
  2. mysql

[解決済み] MySQLでLEFT JOINを使用して複数のテーブルをUPDATEする

2022-04-21 03:10:06

質問

2 つのテーブルがあり、LEFT JOIN ですべての行の T1 のフィールドを更新したいと思います。

簡単な例として、次の結果セットのすべての行を更新します。

SELECT T1.* FROM T1 LEFT JOIN T2 ON T1.id = T2.id WHERE T2.id IS NULL  

MySQLマニュアル という記述があります。

複数テーブルUPDATE文は、LEFT JOINなどのSELECT文で許可されているあらゆるタイプの結合を使用できます。

しかし、ドキュメントにある複数テーブルUPDATEでそれを行うための適切な構文が見当たりません。

適切な構文は何ですか?

どのように解決するのですか?

UPDATE  t1
LEFT JOIN
        t2
ON      t2.id = t1.id
SET     t1.col1 = newvalue
WHERE   t2.id IS NULL

ただし SELECT を使った方が効率的です。 NOT IN / NOT EXISTS の構文で構成されています。

SELECT  t1.*
FROM    t1
WHERE   t1.id NOT IN
        (
        SELECT  id
        FROM    t2
        )

性能の詳細はブログの記事をご覧ください。

残念ながら。 MySQL のサブクエリでターゲットテーブルを使用することはできません。 UPDATE という文言があるので、効率の悪いものにこだわる必要があります。 LEFT JOIN の構文で構成されています。