Ако получавате „ГРЕШКА:липсва запис на клауза FROM за таблица ” в PostgreSQL, когато използвате оператор като UNION
, INTERSECT
, или EXCEPT
, може да се дължи на това, че квалифицирате име на колона с името на таблицата.
За да коригирате това, или премахнете името на таблицата, или използвайте псевдоним на колона.
Пример за грешка
Ето пример за код, който създава грешката:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY Teachers.TeacherName ASC;
Резултат:
ERROR: missing FROM-clause entry for table "teachers" LINE 4: ORDER BY Teachers.TeacherName ASC;
В този случай се опитах да подредя резултатите по TeacherName
колона, но квалифицирах тази колона с името на таблицата (използвах Teachers.TeacherName
за справка с името на колоната).
Референтните таблици като тази не работят при поръчване на резултатите от UNION
, EXCEPT
, или INTERSECT
.
Решение 1
Един от начините да коригирате този проблем е да премахнете името на таблицата от ORDER BY
клауза:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Решение 2
Друг начин да го коригирате е да използвате псевдоним за колоната:
(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY t ASC;
С тази опция присвояваме псевдоним на колоната и след това препращаме към този псевдоним в ORDER BY
клауза.