Ако получавате грешка „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 | +-------------+