在 SQL select 查询中使用 union by 子句排序
Order by clause with union in SQL select query
有没有一种方法可以根据 table 列值对两个 select 所有语句的并集进行排序。
我的示例代码是:
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;
此代码显示错误 as:invalid 标识符 'ENAME'。
我没有在 select 语句中使用特定的列而不是 *,因为 table 中有超过 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;
有没有一种方法可以根据 table 列值对两个 select 所有语句的并集进行排序。 我的示例代码是:
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;
此代码显示错误 as:invalid 标识符 'ENAME'。 我没有在 select 语句中使用特定的列而不是 *,因为 table 中有超过 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;