Ако получавате „ГРЕШКА:липсва запис на клауза 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 клауза.