Hvis du får en fejl, der lyder "FEJL 1250 (42000):Tabel '...' fra en af SELECT'erne kan ikke bruges i den globale ORDER-klausul", når du bruger UNION
klausul i en MySQL-forespørgsel, er det sandsynligvis fordi du kvalificerer et kolonnenavn med dets tabelnavn.
Dette virker ikke i MySQL.
For at løse dette problem skal du enten fjerne tabelnavnet eller bruge et kolonnealias.
Eksempel på fejl
Her er et eksempel på kode, der producerer fejlen:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY Teachers.TeacherName ASC;
Resultat:
ERROR 1250 (42000): Table 'Teachers' from one of the SELECTs cannot be used in global ORDER clause
Her forsøgte jeg at sortere resultaterne efter TeacherName
kolonne, men jeg kvalificerede den kolonne med tabelnavnet (jeg brugte Teachers.TeacherName
for at henvise til kolonnenavnet).
MySQL tillader ikke, at der refereres til tabeller på denne måde, når resultaterne af en UNION
bestilles operation.
Løsning 1
En måde at løse dette på er at fjerne tabelnavnet fra ORDER BY
klausul:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Resultat:
+-------------+ | TeacherName | +-------------+ | Ben | | Bill | | Cathy | | Ein | | Faye | | Jet | | Spike | | Warren | +-------------+
Løsning 2
Hvis den tidligere mulighed ikke er egnet, er en anden måde at løse problemet på ved at bruge et alias. Med andre ord, tildel et alias til kolonnen, og referer derefter til det alias i ORDER BY
klausul:
(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY t ASC;
Resultat:
+--------+ | t | +--------+ | Ben | | Bill | | Cathy | | Ein | | Faye | | Jet | | Spike | | Warren | +--------+