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.