如何使用子查询从 Tab1 中删除在 Oracle SQL 中 Tab2 中的行?

How to use subquery to drop rows from Tab1 which are in Tab2 in Oracle SQL?

我在 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?

使用 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>

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

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

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

我试过这段代码,它运行良好:

select ID 从表 1 其中 ID 不在(select 来自表 2 的 ID)

您无法从 table 中 DROP 行,但您 可以 DELETE 他们

因此将您的标题更正为

How to use subquery to DELETE rows from Tab1 which are in Tab2 in Oracle SQL?

这样做:

delete from tab1
where id  in (select id from tab2);

1 row deleted.

select * from tab1;

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

不要忘记commit进行更改永久