Om du får "ERROR:FROM-klausulen saknas för tabellen ” i PostgreSQL när du använder en operator som UNION
, INTERSECT
, eller EXCEPT
, kan det bero på att du kvalificerar ett kolumnnamn med dess tabellnamn.
För att åtgärda detta, antingen ta bort tabellnamnet eller använda ett kolumnalias.
Exempel på fel
Här är ett exempel på kod som ger felet:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY Teachers.TeacherName ASC;
Resultat:
ERROR: missing FROM-clause entry for table "teachers" LINE 4: ORDER BY Teachers.TeacherName ASC;
I det här fallet försökte jag sortera resultaten efter TeacherName
kolumnen, men jag kvalificerade den kolumnen med tabellnamnet (jag använde Teachers.TeacherName
för att referera till kolumnnamnet).
Referenstabeller som denna fungerar inte när du beställer resultaten av UNION
, EXCEPT
, eller INTERSECT
.
Lösning 1
Ett sätt att åtgärda problemet är att ta bort tabellnamnet från ORDER BY
klausul:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Lösning 2
Ett annat sätt att fixa det är att använda ett alias för kolumnen:
(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY t ASC;
Med det här alternativet tilldelar vi kolumnen ett alias och hänvisar sedan till det aliaset i ORDER BY
klausul.