PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Correction de "ERROR :  missing FROM-clause entry for table" dans PostgreSQL lors de l'utilisation de UNION, EXCEPT ou INTERSECT

Si vous obtenez "ERREUR :entrée de la clause FROM manquante pour la table ” dans PostgreSQL lors de l'utilisation d'un opérateur tel que UNION , INTERSECT , ou EXCEPT , cela peut être dû au fait que vous qualifiez un nom de colonne avec son nom de table.

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:  missing FROM-clause entry for table "teachers"
LINE 4: ORDER BY Teachers.TeacherName ASC;

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 tables comme celle-ci ne fonctionne pas lors de la commande des résultats de UNION , EXCEPT , ou INTERSECT .

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.