oracle中 使用不了,Oracle 中不使用NOT IN 和 NOT EXISTS的另一种方法

用LEFT JOIN 代替NOT IN 或 NOT EXISTS:

SQL> conn scott/tiger

Connected.

SQL> CREATE TABLE testa

2  (

3   id number,

4   value varchar2(10)

5  );

Table created.

SQL> INSERT INTO testa VALUES(1,'a');

1 row created.

SQL> INSERT INTO testa VALUES(2,'b');

1 row created.

SQL> INSERT INTO testa VALUES(3,'c');

1 row created.

SQL> INSERT INTO testa VALUES(4,'d');

1 row created.

SQL> INSERT INTO testa VALUES(5,'e');

1 row created.

SQL> INSERT INTO testa VALUES(6,'f');

1 row created.

SQL> COMMIT;

Commit complete.

SQL> CREATE TABLE testb AS

2  SELECT * FROM testa WHERE 1=0;

Table created.

SQL> INSERT INTO testb VALUES(2,'b');

1 row created.

SQL> INSERT INTO testb VALUES(4,'d');

1 row created.

SQL> INSERT INTO testb VALUES(6,'f');

1 row created.

SQL> COMMIT;

Commit complete.

用左连接,结果testb表里TempColum的值为NULL:

SQL> SELECT a.*,b.id "TempColum" FROM testa a LEFT JOIN testb b ON a.id=b.id;

ID   VALUE       TempColum

---------- ----------       ----------

2       b                   2

4       d                   4

6       f                    6

5       e                   NULL

3       c                   NULL

1       a                   NULL

6 rows selected.

将NULL值过滤出来就是最后需要的结果:

SQL>

SELECT c.id,c.value FROM

(

SELECT a.*,b.id "TempColum" FROM testa a LEFT JOIN testb b ON a.id=b.id

) c

WHERE c."TempColum" IS NULL

ORDER BY c.id

SQL>

ID VALUE

---------- ----------

1 a

3 c

5 e

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值