Welcome 微信登录

首页 / 数据库 / MySQL / Oracle Null 与 in, exists 的关系说明(not in 查不到结果)

同事说查询遇到一个奇怪的事,2个表进行not in 操作没有返回结果,正常情况下应该是有返回的。一.问题重现一般来说,问题能重现就是好消息,最怕不能重现。 SQL> connscott/tiger;Connected.SQL> descemp Name                                     Null?    Type ------------------------------------------------- ----------------- EMPNO                                     NOT NULLNUMBER(4) ENAME                                             VARCHAR2(10) JOB                                               VARCHAR2(9) MGR                                               NUMBER(4) HIREDATE                                           DATE SAL                                               NUMBER(7,2) COMM                                              NUMBER(7,2) DEPTNO                                            NUMBER(2) 将emp 表复制一份:SQL> createtable emp1 as select * from emp;Table created. 我们向emp 表里插入一些值:SQL> insertinto emp(empno,ename) values(8888,"Dave");1 row created.SQL>commit;Commitcomplete.这里我们只插入了empno和ename,其他为空。下面进行2张表的的操作: SQL> selectempno,ename from emp where job not in (select job from emp1);no rowsselected--这里没有返回结果集,正常情况下应该反回我们之前insert 的dave。 SQL> selectempno,ename from emp where job  in(select job from emp1);      EMPNO ENAME--------------------      7934 MILLER      7900 JAMES      7876 ADAMS      7369 SMITH      7844 TURNER      7654 MARTIN      7521 WARD      7499 ALLEN      7782 CLARK      7698 BLAKE      7566 JONES      EMPNO ENAME--------------------      7902 FORD      7788 SCOTT      7839 KING 14 rowsselected.换成exists 进行测试:SQL>select  empno,ename     from emp A where  not  exists  ( SELECT * FROM emp1 Bwhere B.job = A.job);      EMPNO ENAME--------------------      8888 Dave SQL>select   empno,ename   from emp A where  exists ( SELECT * FROM emp1 B where B.job = A.job);      EMPNO ENAME--------------------      7934 MILLER      7900 JAMES      7876 ADAMS      7369 SMITH      7844 TURNER      7654 MARTIN      7521 WARD      7499 ALLEN      7782 CLARK      7698 BLAKE      7566 JONES      EMPNO ENAME--------------------      7902 FORD      7788 SCOTT      7839 KING 14 rowsselected. 使用exists 不受null 的影响。 
  • 1
  • 2
  • 下一页
Oracle 安装OEM 报错: 无法对所有EM 相关账户解锁 解决方法查看 Oracle 是32位还是64位的方法相关资讯      Oracle教程 
  • Oracle中纯数字的varchar2类型和  (07/29/2015 07:20:43)
  • Oracle教程:Oracle中查看DBLink密  (07/29/2015 07:16:55)
  • [Oracle] SQL*Loader 详细使用教程  (08/11/2013 21:30:36)
  • Oracle教程:Oracle中kill死锁进程  (07/29/2015 07:18:28)
  • Oracle教程:ORA-25153 临时表空间  (07/29/2015 07:13:37)
  • Oracle教程之管理安全和资源  (04/08/2013 11:39:32)
本文评论 查看全部评论 (0)
表情: 姓名: 字数