在ORACLE DB中我不明白为什么ORDER BY有时可以工作,有时却不工作。
据我所知 - 列始终来自复合运算符中的第一个子查询。在下面的情况中,我们排序的最后一列amd
:
SELECT 'Ala' col1, 123123 sal, 0.33 amd FROM DUAL
UNION
SELECT 'Ola' kol1, 12444 usd, 0.22 FROM DUAL
ORDER BY amd;
但是添加额外的联合会破坏一切:
SELECT 'Ala' col1, 123123 sal, 0.33 amd FROM DUAL
UNION
SELECT 'Ola' kol1, 12444 usd, 0.22 FROM DUAL
UNION
SELECT 'Ula' coll1, 12444 eur, NULL FROM DUAL
ORDER BY amd;
ORDER BY amd
*
ERROR at line 6:
ORA-00904: "AMD": invalid identifier
即使 amd 仍然是最后一列(没有ORDER BY
的SELECT):
SELECT 'Ala' col1, 123123 sal, 0.33 amd FROM DUAL
UNION
SELECT 'Ola' kol1, 12444 usd, 0.22 FROM DUAL
UNION
SELECT 'Ula' coll1, 12444 eur, NULL FROM DUAL;
COL SAL AMD
--- ---------- ----------
Ala 123123 .33
Ola 12444 .22
Ula 12444
为什么会这样?
我知道我应该为所有列或数字位置使用别名,但我正在准备考试,并希望了解不一致性。
请注意,括号不能解决问题。