Si vous obtenez l'erreur "1054 (42S22):Colonne inconnue '...' dans 'clause de commande'" lors de l'utilisation de UNION
clause dans MySQL, cela peut être dû au fait que vous essayez de référencer une colonne aliasée par son nom de colonne.
Lors de l'utilisation de l'UNION
clause dans MySQL, si une colonne a un alias, alors vous devez utiliser cet alias dans n'importe quel ORDER BY
clause qui fait référence à cette colonne.
Donc, pour corriger l'erreur, assurez-vous de référencer la colonne par son alias. Vous pouvez également supprimer l'alias et référencer directement le nom de la colonne.
Exemple d'erreur
Voici un exemple de code qui génère l'erreur :
(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Résultat :
ERROR 1054 (42S22): Unknown column 'TeacherName' in 'order clause'
Ici, j'ai essayé de classer les résultats par le TeacherName
colonne, mais cette colonne a un alias. Le fait que je n'ai pas utilisé l'alias dans le ORDER BY
clause était suffisante pour produire l'erreur.
Solution 1
Une façon de résoudre ce problème consiste à utiliser l'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 | +--------+
Cela a résolu le problème.
Solution 2
Une autre façon de procéder consiste à supprimer complètement l'alias :
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Résultat :
+-------------+ | TeacherName | +-------------+ | Ben | | Bill | | Cathy | | Ein | | Faye | | Jet | | Spike | | Warren | +-------------+