如何使用子查询从 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
进行更改永久。
我在 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
进行更改永久。