在SQL select查询中使用union的order by子句

时间:2018-06-14 09:58:17

标签: sql oracle sql-order-by union

有没有办法根据表列值来排序两个select all语句的并集。 我的示例代码是:

SELECT *  FROM emp WHERE mgr='7839' 
UNION
SELECT * FROM emp  WHERE NOT EXISTS (SELECT * FROM emp WHERE mgr='7839') 
AND empno='7839' 
order by ename;

此代码显示错误:无效标识符'ENAME'。 我没有在select语句中使用特定列而不是*,因为表中有超过10列,代码看起来很大。 但ename是emp中的一个专栏。

2 个答案:

答案 0 :(得分:1)

您会考虑查询中的小变化吗?

SELECT *  FROM 
(SELECT *  FROM emp WHERE mgr='7839' 
UNION
SELECT * FROM emp  WHERE NOT EXISTS (SELECT * FROM emp WHERE mgr='7839') 
AND empno='7839') AA 
order by AA.ename;

答案 1 :(得分:0)

为什么要使用union呢?只是做:

SELECT e.* 
FROM emp e
WHERE e.mgr = '7839' OR
      (NOT EXISTS (SELECT 1 FROM emp e2 WHERE e2.mgr = '7839') AND
       empno = '7839' 
      )
ORDER BY ename;