首页 > 解决方案 > 如何使用子查询从 Oracle SQL 的 Tab2 中的 Tab1 中删除行?

问题描述

我在 Oracle SQL 中有如下表:

选项卡1

ID
-----
1
2
3

选项卡2

ID
-----
3
4
5

我需要从 Tab1 中获取不在 Tab2 中的值。我做了如下查询:

select ID
from Tab1
where ID not in (select ID from Tab2)

上面的查询不起作用,我怎样才能改变它以达到我需要的结果:

ID
---
1
2

我可以补充一点,我更喜欢在这个问题中使用子查询,我该如何在 Oracle SQL 中做到这一点?

标签: sqloraclesubquery

解决方案


使用MINUS集合运算符:

SQL> with
  2  tab1 (id) as
  3    (select 1 from dual union all
  4     select 2 from dual union all
  5     select 3 from dual
  6    ),
  7  tab2 (id) as
  8    (select 3 from dual union all
  9     select 4 from dual union all
 10     select 5 from dual
 11    )
 12  select id from tab1
 13  minus
 14  select id from tab2;

        ID
----------
         1
         2

SQL>

顺便说一句,您使用的查询(带有子查询)返回正确的结果;你的意思是说你喜欢使用子查询吗?

 <snip>
 12  select id from tab1
 13  where id not in (select id from tab2);

        ID
----------
         1
         2

推荐阅读