3

有两个表TABLE1TABLE2,其中有一个公共字段ID。我想根据ID值从TABLE2中检索与TABLE1中不匹配的值。

select * from TABLE2 where subject = 1 and ID NOT IN (select ID from TABLE1 where subject = 1)

样本:

表1
ID 主题
1 1

表2
ID 主题
1 1
2 1

预期的结果是 2,它工作正常。

但是当TABLE1 为空内部 select ID from TABLE1 where subject = 1返回空时,整个 select 语句返回空。 但预期的结果是 1, 2

有没有办法做到这一点?

4

2 回答 2

3

用一个left join

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

查看连接的一个很好的解释

于 2013-05-20T20:17:34.690 回答
1

我认为你不能exists也用于这项工作 -

select * from TABLE2 where subject = 1 and NOT exists
(select 1 from TABLE1 where subject = 1 and table1.id = table2.id)
于 2013-05-20T20:21:21.043 回答