2011-11-03 51 views
8

我有两个简单的表:(这里只有 “ID” 列)比较两个SQL表并返回缺少的ID?

表1:

id 
1 
2 
3 
4 

表2:

id 
2 
4 

SQL查询应该比较两个表丢失“ ID“在表2中并返回: 1,2

有什么想法? :) TY

+0

到目前为止,所有的答案都只显示table1中缺少table1中的id。你是否需要一个查询来返回table1中所有在column1中缺少的查询? –

+0

嗨保罗,没有一种方法只是我需要的。 – MilMike

+1

该关键字是“EXCEPT”。 MySQL不支持此操作,但在搜索中使用它将返回大量关于工作和其他方法的结果。 (这个问题不时出现) – 2011-11-03 16:09:14

回答

26

有几种方法对皮肤这只猫:

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 
+0

我建议你在第一个查询中使用表名前缀来说明你的意思是哪个ID字段,如果只是因为如果你扩展它会变得非常混乱后来。 – Polynomial

+0

@Polynomial,同意并更新。 –

+1

年前。但仍然有帮助。幸运的是,我找到了你的答案:D thx –

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

@Raihan因为在给定的T1下,LEFT OUTER可能会从T2中加入“no rows”(这是这种方法的关键)。缺失的行是这样的行...缺少:-) – 2011-11-03 16:07:28

+0

为什么downvote? – RedFilter

1

试试这个:

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