比较两个SQL表并返回缺失的ID?

12

我有两个简单的表格: (这里只有"id"列)

表格1:

id
1
2
3
4

表格2:

id
2
4

这个 SQL 查询应该比较两个表,找出 table2 中缺失的“id”,并返回:1、3。

有什么想法吗?:) 谢谢


到目前为止,所有的答案都只显示了表1中缺失在表2中的ID。您是否需要一个查询来返回表2中在列1中也缺失的所有内容? - Paul Tomblin
嗨,保罗,不,我只需要单向的方式。 - MilMike
1
关键字是 EXCEPT。MySQL 不支持此操作,但在搜索中使用它将返回大量的结果,以供解决问题和采用其他方法。(这个问题时不时会出现。) - user166390
3个回答

42

有几种方法可以解决这个问题:

SELECT    table1.ID
FROM      table1
WHERE     table1.ID NOT IN(SELECT table2.ID FROM table2)

或者你可以使用左外连接:

SELECT          table1.ID
FROM            table1
LEFT OUTER JOIN table2 ON table1.ID = table2.ID
WHERE           table2.ID IS NULL

我建议您在第一个查询中使用表名前缀来澄清您所指的ID字段,即使只是因为如果稍后扩展它,阅读起来会变得非常混乱。 - Polynomial

2
select t1.*
from table1 t1
left outer join table2 t2 on t1.id = t2.id
where t2.id is null

1
@Raihan 因为 LEFT OUTER 可以将 T2 中“没有行”与给定 T1 进行连接(这是这种方法的关键),缺失的行是那些确实丢失的行 :-) - user166390

1

试试这个:

SELECT    table1.id
FROM      table1
WHERE     table1.id NOT IN(SELECT table2.id FROM table2)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接