首页 > 解决方案 > UNION 中的 Oracle ORDER BY

问题描述

我有这个查询:

SELECT p.prenume||' '||p.nume ||' '||LOWER(REVERSE(c.titlu_curs)) AS "Info"
from profesori p JOIN didactic d ON d.id_prof = p.id_prof 
JOIN cursuri c ON d.id_curs = c.id_curs 
UNION
SELECT p.prenume||' '||p.nume||' ' AS "Info" from profesori p 
JOIN didactic d ON p.id_prof NOT IN 
(SELECT id_prof from didactic)
JOIN cursuri c ON c.id_curs NOT IN (SELECT id_curs from didactic) ORDER BY p.nume

我如何通过 p.nume 订购?我收到此错误 'P"."NUME": invalid identifier' 我知道我可以通过 Alias "Info" 订购,但我如何只能通过 p.nume 订购?

标签: oracle

解决方案


我如何通过 p.nume 订购?

对于 UNION 查询,我们只能在第一个子查询的投影中按命名列排序。您的查询仅nume作为连接列的一部分,因此出现 ORA-00904 错误。

按结果集中的列对 UNION 查询进行排序意味着您可以按列别名排序...

order by "Info"

...这意味着它将有效地按prenume, nume, LOWER(REVERSE(c.titlu_curs)).

另一种解决方案 - 当您不给排序列起别名时很有用 - 是使用位置符号

order by 1

推荐阅读