假设我有 2 张桌子 T1 和 T2。我需要表 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
...
这正是 aLEFT JOIN
的用途。在你的情况下:
SELECT T1.*
FROM T1
LEFT JOIN T2 ON T1.ID=T2.T1ID
WHERE T2.ID IS NULL
推荐阅读:MySQL JOIN 语法
select t1.* from t1
left join t2 on t1.id = t2.id
where t2.id is null
如果我理解你是正确的,你需要这样的东西:
SELECT *
FROM t1
WHERE NOT EXISTS (SELECT 1 FROM t2 WHERE t1.id = t2.t1id)
这将返回 t1 中在 t2 中没有任何匹配记录的所有记录 (t1.id = t2.t1id)。