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 | +-------------+