0

T1 と T2 という 2 つのテーブルがあるとします。テーブル T2 に存在しないテーブル T1 のすべての値が必要です。その SQL はどのようになりますか?

T1:         T2:
T1.ID       T2.ID   
T1.Value    T2.T1ID 
T1.Date     T2.Value
4

4 に答える 4

2

テーブル 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
...
于 2012-10-24T11:12:22.160 に答える
1

これはまさに a のLEFT JOIN目的です。あなたの場合:

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

推奨される読み方: MySQL JOIN 構文

于 2012-10-24T10:59:40.347 に答える
0

私があなたが正しいことを理解しているなら、あなたはこのようなものが必要です:

SELECT *
  FROM t1
 WHERE NOT EXISTS (SELECT 1 FROM t2 WHERE t1.id = t2.t1id)

これにより、t2に一致するレコードがないt1のすべてのレコードが返されます(t1.id = t2.t1id)。

于 2012-10-24T11:39:43.513 に答える
0
select t1.* from t1
left join t2 on t1.id = t2.id
where t2.id is null 
于 2012-10-24T10:59:48.973 に答える