Jeśli otrzymujesz błąd „1054 (42S22):Nieznana kolumna „…” w „klauzuli zamówienia”” podczas korzystania z UNION
w MySQL, może to być spowodowane tym, że próbujesz odwołać się do kolumny z aliasem według jej nazwy.
Podczas korzystania z UNION
klauzula w MySQL, jeśli kolumna ma alias, musisz użyć tego aliasu w dowolnym ORDER BY
klauzula odwołująca się do tej kolumny.
Aby naprawić błąd, pamiętaj, aby odwoływać się do kolumny za pomocą jej aliasu. Alternatywnie możesz usunąć alias i bezpośrednio odwołać się do nazwy kolumny.
Przykład błędu
Oto przykład kodu, który generuje błąd:
(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Wynik:
ERROR 1054 (42S22): Unknown column 'TeacherName' in 'order clause'
Tutaj próbowałem uporządkować wyniki według TeacherName
kolumna, ale ta kolumna ma alias. Fakt, że nie użyłem aliasu w ORDER BY
klauzula wystarczyła do wygenerowania błędu.
Rozwiązanie 1
Jednym ze sposobów rozwiązania tego problemu jest użycie aliasu w ORDER BY
klauzula:
(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY t ASC;
Wynik:
+--------+ | t | +--------+ | Ben | | Bill | | Cathy | | Ein | | Faye | | Jet | | Spike | | Warren | +--------+
To rozwiązało problem.
Rozwiązanie 2
Innym sposobem na to jest całkowite usunięcie aliasu:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Wynik:
+-------------+ | TeacherName | +-------------+ | Ben | | Bill | | Cathy | | Ein | | Faye | | Jet | | Spike | | Warren | +-------------+