Wenn Sie den Fehler „1054 (42S22):Unbekannte Spalte ‚…‘ in ‚Bestellklausel‘“ erhalten, wenn Sie die UNION
verwenden -Klausel in MySQL, könnte dies daran liegen, dass Sie versuchen, eine Alias-Spalte anhand ihres Spaltennamens zu referenzieren.
Bei Verwendung von UNION
-Klausel in MySQL, wenn eine Spalte einen Alias hat, müssen Sie diesen Alias in jedem ORDER BY
verwenden Klausel, die auf diese Spalte verweist.
Um den Fehler zu beheben, verweisen Sie also unbedingt auf die Spalte mit ihrem Alias. Alternativ könnten Sie den Alias entfernen und direkt auf den Spaltennamen verweisen.
Fehlerbeispiel
Hier ist ein Codebeispiel, das den Fehler erzeugt:
(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Ergebnis:
ERROR 1054 (42S22): Unknown column 'TeacherName' in 'order clause'
Hier habe ich versucht, die Ergebnisse nach TeacherName
zu ordnen Spalte, aber diese Spalte hat einen Alias. Die Tatsache, dass ich den Alias im ORDER BY
nicht verwendet habe -Klausel reichte aus, um den Fehler zu erzeugen.
Lösung 1
Eine Möglichkeit, dieses Problem zu beheben, besteht darin, den Alias in ORDER BY
zu verwenden Klausel:
(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY t ASC;
Ergebnis:
+--------+ | t | +--------+ | Ben | | Bill | | Cathy | | Ein | | Faye | | Jet | | Spike | | Warren | +--------+
Das hat das Problem gelöst.
Lösung 2
Eine andere Möglichkeit besteht darin, den Alias vollständig zu entfernen:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Ergebnis:
+-------------+ | TeacherName | +-------------+ | Ben | | Bill | | Cathy | | Ein | | Faye | | Jet | | Spike | | Warren | +-------------+