SQL JOIN用于跨表获取唯一值的内容是什么?

时间:2012-10-24 10:57:55

标签: mysql sql join

假设我有两张桌子T1和T2。我需要来自表T1中表T2中不存在的所有值。那个SQL怎么样?

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

4 个答案:

答案 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)。