Oracle UNION中的ORDER BY

时间:2018-11-11 00:16:05

标签: oracle

我有这个查询:

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”:无效标识符” 我知道我可以通过Alias“ Info”订购,但是我怎么只能通过p.nume订购?

1 个答案:

答案 0 :(得分:1)

  

如何按p.nume订购?

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

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

order by "Info"

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

另一种解决方案-使用位置表示法

-当您不给排序列加上别名时很有用-

order by 1