不在SQL

时间:2017-05-17 10:11:24

标签: sql sql-server

有2个表

table1
ID
1
2
4
6
7

TABLE2
2
4
6

我希望table1中的那些不在table2中的数字我是怎么做到的? 我试试这个

select id from table1 t1
inner join table2 t2 on t1.id=t2.id
where t1.id not in (select id from table2) 

但这不起作用

4 个答案:

答案 0 :(得分:3)

SELECT t1.id
FROM table1 t1
LEFT JOIN table2 t2 ON t2.id = t1.id
WHERE t2.id IS NULL

从概念上讲,我们从table1中选择所有行,并且对于每一行,我们尝试在table2中找到一个具有相同id值列的行。如果没有这样的行,我们只是将结果的table2部分留空。然后我们通过仅选择匹配行不存在的结果中的那些行来约束我们的选择。最后,我们忽略了结果中的所有字段,除了id列(我们确定存在的那个,来自table1)。

答案 1 :(得分:2)

试试这个:

select id from table1 t1 where t1.id not in (select t2.id from table2 t2)

答案 2 :(得分:2)

在这种情况下,您无需加入这两个表。你可以做到

  select id from table1 A where A.id not in (select B.id from table2 B);

你也可以简单地使用sql set差异EXCEPT运算符来实现这个

  (select id from table1) except (select id from table2);

答案 3 :(得分:0)

使用NOT INNOT EXISTS

select id from table1 t1
where t1.id not in (select id from table2) 


select id from table1 t1
where not exists (select id from table2 where id = t1.id)