T1 と T2 という 2 つのテーブルがあるとします。テーブル T2 に存在しないテーブル T1 のすべての値が必要です。その SQL はどのようになりますか?
T1: T2:
T1.ID T2.ID
T1.Value T2.T1ID
T1.Date T2.Value
テーブル T2 に存在しないテーブル T1 のすべての値が必要です。その SQL はどのようになりますか?
T1.Value
一致しないすべてが必要ということですT2.Value
か?
その場合、次のようなものを使用できます。
SELECT * FROM T1
WHERE Value NOT IN (SELECT Value FROM T2)
ただし、MySQL は、このクエリを実行するための最適な計画を見つけるのにあまり適していない可能性があるため、測定結果がパフォーマンスの問題を示している場合は、次のようなことを試してください。
SELECT DISTINCT T1.*
FROM T1 LEFT JOIN T2 ON T1.Value = T2.Value
WHERE T2.ID IS NULL
DISTINCT 句に注意してください。これにより、T1 行が JOIN によって「乗算」されないことが保証されます。
または、次のことだけを気にする場合は、次のようにしますT1.Value
。
SELECT DISTINCT T1.Value
...
これはまさに a のLEFT JOIN
目的です。あなたの場合:
SELECT T1.*
FROM T1
LEFT JOIN T2 ON T1.ID=T2.T1ID
WHERE T2.ID IS NULL
推奨される読み方: MySQL JOIN 構文
私があなたが正しいことを理解しているなら、あなたはこのようなものが必要です:
SELECT *
FROM t1
WHERE NOT EXISTS (SELECT 1 FROM t2 WHERE t1.id = t2.t1id)
これにより、t2に一致するレコードがないt1のすべてのレコードが返されます(t1.id = t2.t1id)。
select t1.* from t1
left join t2 on t1.id = t2.id
where t2.id is null