Ако получавате грешка „1054 (42S22):Неизвестна колона „…“ в „клауза за поръчка““, когато използвате UNION
клауза в MySQL, това може да е защото се опитвате да препратите колона с псевдоним по нейното име на колона.
Когато използвате UNION
клауза в MySQL, ако колона има псевдоним, тогава трябва да използвате този псевдоним във всеки ORDER BY
клауза, която препраща към тази колона.
Така че, за да коригирате грешката, не забравяйте да препратите колоната по нейния псевдоним. Като алтернатива можете да премахнете псевдонима и да препратите директно към името на колоната.
Пример за грешка
Ето пример за код, който създава грешката:
(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Резултат:
ERROR 1054 (42S22): Unknown column 'TeacherName' in 'order clause'
Тук се опитах да подредя резултатите по TeacherName
колона, но тази колона има псевдоним. Фактът, че не използвах псевдонима в ORDER BY
клаузата беше достатъчна, за да доведе до грешката.
Решение 1
Един от начините да коригирате този проблем е да използвате псевдонима в ORDER BY
клауза:
(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY t ASC;
Резултат:
+--------+ | t | +--------+ | Ben | | Bill | | Cathy | | Ein | | Faye | | Jet | | Spike | | Warren | +--------+
Това реши проблема.
Решение 2
Друг начин да го направите е да премахнете изцяло псевдонима:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Резултат:
+-------------+ | TeacherName | +-------------+ | Ben | | Bill | | Cathy | | Ein | | Faye | | Jet | | Spike | | Warren | +-------------+