PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Behebung von „ERROR:  missing FROM-clause entry for table“ in PostgreSQL bei Verwendung von UNION, EXCEPT oder INTERSECT

Wenn Sie "ERROR:missing FROM-clause entry for table" erhalten ” in PostgreSQL, wenn ein Operator wie UNION verwendet wird , INTERSECT , oder EXCEPT , könnte es daran liegen, dass Sie einen Spaltennamen mit seinem Tabellennamen qualifizieren.

Um dies zu beheben, entfernen Sie entweder den Tabellennamen oder verwenden Sie einen Spaltenalias.

Fehlerbeispiel

Hier ist ein Codebeispiel, das den Fehler erzeugt:

(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY Teachers.TeacherName ASC;

Ergebnis:

ERROR:  missing FROM-clause entry for table "teachers"
LINE 4: ORDER BY Teachers.TeacherName ASC;

In diesem Fall habe ich versucht, die Ergebnisse nach TeacherName zu ordnen Spalte, aber ich habe diese Spalte mit dem Tabellennamen qualifiziert (ich habe Teachers.TeacherName verwendet um auf den Spaltennamen zu verweisen).

Das Verweisen auf Tabellen wie diese funktioniert nicht, wenn die Ergebnisse von UNION sortiert werden , EXCEPT , oder INTERSECT .

Lösung 1

Eine Möglichkeit, dieses Problem zu beheben, besteht darin, den Tabellennamen aus ORDER BY zu entfernen Klausel:

(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;

Lösung 2

Eine andere Möglichkeit, dies zu beheben, besteht darin, einen Alias ​​für die Spalte zu verwenden:

(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY t ASC;

Mit dieser Option weisen wir der Spalte einen Alias ​​zu und verweisen dann in ORDER BY auf diesen Alias Klausel.