在没有MINUS运算符的情况下查找表中缺少的行

时间:2018-09-22 14:42:09

标签: sql oracle oracle11g

我有源表和目标表,那么如何在不使用Oracle数据库中的minus查询的情况下计算目标表中的丢失记录?

1 个答案:

答案 0 :(得分:2)

您为什么不使用MINUS

这很简单:

SQL> select deptno from dept
  2  minus
  3  select deptno from emp;

    DEPTNO
----------
        40

这更复杂:

SQL> select d.deptno from dept d
  2  where not exists (select null from emp e
  3                    where e.deptno = d.deptno);

    DEPTNO
----------
        40

SQL>

您说过不想使用MINUS,但是-您从未说过不想使用INTERSECT,所以:

SQL> select d.deptno from dept d
  2  where d.deptno not in (select d1.deptno from dept d1
  3                         intersect
  4                         select e.deptno  from emp e);

    DEPTNO
----------
        40

SQL>

甚至

SQL> select d.deptno from dept d
  2  where d.deptno not in (select e.deptno from emp e
  3                         where e.deptno = d.deptno);

    DEPTNO
----------
        40

SQL>

或者这个:

SQL> select d.deptno
  2  from dept d left join emp e on e.deptno = d.deptno
  3  where e.deptno is null;

    DEPTNO
----------
        40

SQL>