【问题标题】:Order by clause with union in SQL select query在 SQL 选择查询中使用并集排序子句
【发布时间】:2018-06-14 18:50:22
【问题描述】:
有没有办法根据表列值对两个全选语句的联合进行排序。
我的示例代码是:
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 中的一列。
【问题讨论】:
标签:
sql
oracle
sql-order-by
union
【解决方案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;
【解决方案2】:
为什么要为此使用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;