在 SQL 选择查询中按具有联合的子句排序



有没有办法根据表列值对两个全选语句的并集进行排序。 我的示例代码是:

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 中的一列。

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

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;

为什么要为此使用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;