Jeśli otrzymujesz błąd, który brzmi „BŁĄD 1250 (42000):Tabela „…” z jednej z SELECTów nie może być użyta w globalnej klauzuli ORDER” podczas korzystania z UNION
w zapytaniu MySQL, prawdopodobnie dlatego, że kwalifikujesz nazwę kolumny z jej nazwą tabeli.
To nie działa w MySQL.
Aby rozwiązać ten problem, usuń nazwę tabeli lub użyj aliasu kolumny.
Przykład błędu
Oto przykład kodu, który generuje błąd:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY Teachers.TeacherName ASC;
Wynik:
ERROR 1250 (42000): Table 'Teachers' from one of the SELECTs cannot be used in global ORDER clause
Tutaj próbowałem uporządkować wyniki według TeacherName
kolumna, ale zakwalifikowałem tę kolumnę nazwą tabeli (użyłem Teachers.TeacherName
odwoływać się do nazwy kolumny).
MySQL nie pozwala na odwoływanie się do tabel w ten sposób podczas porządkowania wyników UNION
operacja.
Rozwiązanie 1
Jednym ze sposobów rozwiązania tego problemu jest usunięcie nazwy tabeli z ORDER BY
klauzula:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Wynik:
+-------------+ | TeacherName | +-------------+ | Ben | | Bill | | Cathy | | Ein | | Faye | | Jet | | Spike | | Warren | +-------------+
Rozwiązanie 2
Jeśli poprzednia opcja nie jest odpowiednia, innym sposobem rozwiązania problemu jest użycie aliasu. Innymi słowy, przypisz alias do kolumny, a następnie odwołaj się do tego 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 | +--------+