Si vous obtenez une erreur indiquant "ERREUR 1250 (42000):la table '...' de l'un des SELECT ne peut pas être utilisée dans la clause ORDER globale" lors de l'utilisation de UNION
clause dans une requête MySQL, c'est probablement parce que vous qualifiez un nom de colonne avec son nom de table.
Cela ne fonctionne pas dans MySQL.
Pour résoudre ce problème, supprimez le nom de la table ou utilisez un alias de colonne.
Exemple d'erreur
Voici un exemple de code qui génère l'erreur :
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY Teachers.TeacherName ASC;
Résultat :
ERROR 1250 (42000): Table 'Teachers' from one of the SELECTs cannot be used in global ORDER clause
Ici, j'ai essayé de classer les résultats par le TeacherName
colonne, mais j'ai qualifié cette colonne avec le nom de la table (j'ai utilisé Teachers.TeacherName
pour référencer le nom de la colonne).
MySQL n'autorise pas les tables à être référencées de cette manière lors de la commande des résultats d'un UNION
opération.
Solution 1
Une façon de résoudre ce problème consiste à supprimer le nom de la table du ORDER BY
clause :
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Résultat :
+-------------+ | TeacherName | +-------------+ | Ben | | Bill | | Cathy | | Ein | | Faye | | Jet | | Spike | | Warren | +-------------+
Solution 2
Si l'option précédente ne convient pas, une autre façon de résoudre le problème consiste à utiliser un alias. En d'autres termes, affectez un alias à la colonne, puis référencez cet alias dans le ORDER BY
clause :
(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY t ASC;
Résultat :
+--------+ | t | +--------+ | Ben | | Bill | | Cathy | | Ein | | Faye | | Jet | | Spike | | Warren | +--------+