假设我有两张桌子T1和T2。我需要来自表T1中表T2中不存在的所有值。那个SQL怎么样?
T1: T2:
T1.ID T2.ID
T1.Value T2.T1ID
T1.Date T2.Value
答案 0 :(得分:2)
我需要来自表T1中表T2中不存在的所有值。那个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
...
答案 1 :(得分:1)
这正是LEFT JOIN
的用途。在你的情况下:
SELECT T1.*
FROM T1
LEFT JOIN T2 ON T1.ID=T2.T1ID
WHERE T2.ID IS NULL
推荐重播:MySQL JOIN Syntax
答案 2 :(得分:0)
select t1.* from t1
left join t2 on t1.id = t2.id
where t2.id is null
答案 3 :(得分:0)
如果我理解你是对的,你需要这样的东西:
SELECT *
FROM t1
WHERE NOT EXISTS (SELECT 1 FROM t2 WHERE t1.id = t2.t1id)
这将返回t1中t2中没有任何匹配记录的所有记录(t1.id = t2.t1id)。