我有以下内容(请注意,ID不是唯一的):
表1:
ID Name Desc
-----------------
1 Joe etc.
2 Bob etc.
3 Jane etc.
表2:
ID Report Email.
--------------------------------
1 report1 joe@gmail.com
4 report4 jen@gmail.com
4 report4-2 jen@gmail.com
我希望能够识别来自TABLE1的哪些IDS不在TABLE2中。
我尝试过类似的事情:
select distinct table1.id
from table1, table2
where exists { select table1.id from table1 where table1.id != table2.id)
但是我似乎收到了很多使Oracle SQL Developer失败的结果。我想要的理想结果是:
2
3
在表2中不存在这两个ID的地方。
答案 0 :(得分:0)
您可以使用LEFT JOIN
反模式:
SELECT t1.id
FROM table1 t1
LEFT JOIN table2 t2 ON t1.id = t2.id
WHERE t2.id IS NULL
如果id
中有重复的table1
,则可以使用SELECT DISTINCT
代替SELECT
。
注意:您的原始查询距离没有那么远。基本上,您不需要加入(而是使用相关子查询),而您想使用NOT EXISTS
而不是EXISTS
:
select distinct table1.id
from table1
where not exists(
select 1 from from table2 where table1.id = table2.id
)
答案 1 :(得分:0)
尝试一下:
select distinct id
from table1
where ID not in (select distinct id
from table2)
答案 2 :(得分:0)
另一种选择:select id from table1 where id not in (select id from table2)