Hvis du får "FEJL:mangler FROM-klausulindtastning for tabel ” i PostgreSQL, når du bruger en operator såsom UNION
, INTERSECT
, eller EXCEPT
, kan det skyldes, at du kvalificerer et kolonnenavn med dets tabelnavn.
For at rette dette skal du enten fjerne tabelnavnet eller bruge et kolonnealias.
Eksempel på fejl
Her er et eksempel på kode, der producerer fejlen:
(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 dette tilfælde forsøgte jeg at sortere resultaterne efter TeacherName
kolonne, men jeg kvalificerede den kolonne med tabelnavnet (jeg brugte Teachers.TeacherName
for at henvise til kolonnenavnet).
Referencetabeller som denne virker ikke, når du bestiller resultaterne af UNION
, EXCEPT
, eller INTERSECT
.
Løsning 1
En måde at løse dette problem på er at fjerne tabelnavnet fra ORDER BY
klausul:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Løsning 2
En anden måde at løse det på er at bruge et alias for kolonnen:
(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY t ASC;
Med denne mulighed tildeler vi et alias til kolonnen og henviser derefter til det alias i ORDER BY
klausul.