0

假设我有 2 张桌子 T1 和 T2。我需要表 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

这正是 aLEFT 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 t1.* from t1
left join t2 on t1.id = t2.id
where t2.id is null 
于 2012-10-24T10:59:48.973 回答
0

如果我理解你是正确的,你需要这样的东西:

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

这将返回 t1 中在 t2 中没有任何匹配记录的所有记录 (t1.id = t2.t1id)。

于 2012-10-24T11:39:43.513 回答