Hvis du får fejlen "1054 (42S22):Ukendt kolonne '...' i 'ordre clause'", når du bruger UNION
klausul i MySQL, kan det skyldes, at du forsøger at henvise til en aliaseret kolonne ved dens kolonnenavn.
Når du bruger UNION
klausul i MySQL, hvis en kolonne har et alias, skal du bruge det alias i enhver ORDER BY
klausul, der refererer til den kolonne.
Så for at rette fejlen skal du sørge for at henvise til kolonnen ved dens alias. Alternativt kan du fjerne aliasset og henvise direkte til kolonnenavnet.
Eksempel på fejl
Her er et eksempel på kode, der producerer fejlen:
(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Resultat:
ERROR 1054 (42S22): Unknown column 'TeacherName' in 'order clause'
Her forsøgte jeg at sortere resultaterne efter TeacherName
kolonne, men den kolonne har et alias. Det faktum, at jeg ikke brugte aliaset i ORDER BY
klausulen var nok til at frembringe fejlen.
Løsning 1
En måde at løse dette problem på er at bruge aliaset 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 | +--------+
Det løste problemet.
Løsning 2
En anden måde at gøre det på er at fjerne aliaset helt:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Resultat:
+-------------+ | TeacherName | +-------------+ | Ben | | Bill | | Cathy | | Ein | | Faye | | Jet | | Spike | | Warren | +-------------+