Als u een foutmelding krijgt met de tekst "ERROR 1250 (42000):Tabel '...' van een van de SELECT's kan niet worden gebruikt in de globale ORDER-clausule" bij gebruik van de UNION
clausule in een MySQL-query, komt dit waarschijnlijk omdat u een kolomnaam kwalificeert met zijn tabelnaam.
Dit werkt niet in MySQL.
Om dit probleem op te lossen, verwijdert u de tabelnaam of gebruikt u een kolomalias.
Voorbeeld van fout
Hier is een voorbeeld van code die de fout veroorzaakt:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY Teachers.TeacherName ASC;
Resultaat:
ERROR 1250 (42000): Table 'Teachers' from one of the SELECTs cannot be used in global ORDER clause
Hier heb ik geprobeerd de resultaten te ordenen op TeacherName
kolom, maar ik heb die kolom gekwalificeerd met de tabelnaam (ik gebruikte Teachers.TeacherName
om naar de kolomnaam te verwijzen).
MySQL staat niet toe dat op deze manier naar tabellen wordt verwezen bij het bestellen van de resultaten van een UNION
bediening.
Oplossing 1
Een manier om dit op te lossen is door de tabelnaam te verwijderen uit de ORDER BY
clausule:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Resultaat:
+-------------+ | TeacherName | +-------------+ | Ben | | Bill | | Cathy | | Ein | | Faye | | Jet | | Spike | | Warren | +-------------+
Oplossing 2
Als de vorige optie niet geschikt is, is een andere manier om het probleem op te lossen het gebruik van een alias. Met andere woorden, wijs een alias toe aan de kolom en verwijs vervolgens naar die alias 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 | +--------+