ORACLE/SQL

잡동사니 퀴리

argoLee 2017. 7. 5. 15:35

- OR 조건을 UNION ALL로 변경 시에 중복 값을 제거 하기 





* OR 조건을 UNION ALL로 변경 시에 중복 값을 제거(LNNVL 함수 사용)


SELECT /*+ QB_NAME(MAIN) USE_CONCAT   */

            e.empno , e.ename , d.dname

     FROM   emp e , dept d

     WHERE  e.deptno = d.deptno

     AND    (d.deptno IN (10,20) OR e.mgr IN ( 7839  , 7698 )) ;


     ==>


     SELECT /*+ QB_NAME(MAIN1) */

            e.empno , e.ename , d.dname

     FROM   emp e , dept d

     WHERE  e.deptno = d.deptno

     AND    e.mgr IN ( 7839  , 7698 )

     UNION ALL

     SELECT /*+ QB_NAME(MAIN2) */

            e.empno , e.ename , d.dname

     FROM   emp e , dept d

     WHERE  e.deptno = d.deptno

     AND    d.deptno IN (10,20)

     AND    (lnnvl(e.mgr = 7839) AND lnnvl(e.mgr = 7698 )) ;