sql union代替or

---原始SQL
SQL> SELECT deptno FROM emp WHERE empno = 7788 OR job = 'SALESMAN' ORDER BY 1;

    DEPTNO
----------
	20
	30
	30
	30
	30

SQL> SELECT deptno FROM emp WHERE empno = 7788
UNION
SELECT deptno FROM emp WHERE job = 'SALESMAN';  2    3  

    DEPTNO
----------
	20
	30


为什么丢数据呢?

SQL> SELECT deptno FROM emp WHERE empno = 7788;

    DEPTNO
----------
	20

SQL> SELECT deptno FROM emp WHERE job = 'SALESMAN';

    DEPTNO
----------
	30
	30
	30
	30


原来emp表被去从数据了

SQL> SELECT deptno
FROM
(
SELECT empno,deptno FROM emp WHERE empno = 7788
UNION
SELECT empno,deptno FROM emp WHERE job = 'SALESMAN'
)
ORDER BY 1;  2    3    4    5    6    7    8  

    DEPTNO
----------
	20
	30
	30
	30
	30


SQL> SELECT empno,deptno FROM emp WHERE empno = 7788;

     EMPNO     DEPTNO
---------- ----------
      7788	   20

SQL> SELECT empno,deptno FROM emp WHERE job = 'SALESMAN';

     EMPNO     DEPTNO
---------- ----------
      7499	   30
      7521	   30
      7654	   30
      7844	   30

加上empno唯一列后,就不会在去从的时候丢失数据。

posted @ 2014-03-18 19:31  czcb  阅读(492)  评论(0编辑  收藏  举报