Als u de fout "1054 (42S22):Onbekende kolom '...' in 'bestellingsclausule'" krijgt bij gebruik van de UNION
clausule in MySQL, kan het zijn dat u probeert te verwijzen naar een gealiaste kolom met de kolomnaam.
Bij gebruik van de UNION
clausule in MySQL, als een kolom een alias heeft, moet u die alias gebruiken in een ORDER BY
clausule die naar die kolom verwijst.
Dus om de fout op te lossen, moet u naar de kolom verwijzen met zijn alias. U kunt ook de alias verwijderen en rechtstreeks naar de kolomnaam verwijzen.
Voorbeeld van fout
Hier is een voorbeeld van code die de fout veroorzaakt:
(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Resultaat:
ERROR 1054 (42S22): Unknown column 'TeacherName' in 'order clause'
Hier heb ik geprobeerd de resultaten te ordenen op TeacherName
kolom, maar die kolom heeft een alias. Het feit dat ik de alias niet heb gebruikt in de ORDER BY
clausule was genoeg om de fout te produceren.
Oplossing 1
Een manier om dit probleem op te lossen is door de alias te gebruiken in de ORDER BY
clausule:
(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY t ASC;
Resultaat:
+--------+ | t | +--------+ | Ben | | Bill | | Cathy | | Ein | | Faye | | Jet | | Spike | | Warren | +--------+
Dat loste het probleem op.
Oplossing 2
Een andere manier om dit te doen is door de alias helemaal te verwijderen:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Resultaat:
+-------------+ | TeacherName | +-------------+ | Ben | | Bill | | Cathy | | Ein | | Faye | | Jet | | Spike | | Warren | +-------------+