Si vous obtenez "ERROR 1250 (42000):La table '...' de l'un des SELECT ne peut pas être utilisée dans la clause ORDER", c'est probablement parce que vous qualifiez un nom de colonne avec son nom de table lorsque vous utilisez un opérateur tel que UNION
, INTERSECT
, ou EXCEPT
dans MariaDB.
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 ORDER clause
Dans ce cas, 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).
Le référencement de tableaux comme celui-ci ne fonctionne pas lors de la commande des résultats d'un UNION
opération dans MariaDB. Il en va de même lors de la commande des résultats de l'INTERSECT
opérateur et le EXCEPT
opérateur.
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;
Solution 2
Une autre façon de résoudre ce problème consiste à utiliser un alias pour la colonne :
(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY t ASC;
Avec cette option, nous attribuons un alias à la colonne, puis référençons cet alias dans le ORDER BY
clause.