PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Коригирайте „ГРЕШКА:  липсва запис на клауза FROM за таблица“ в PostgreSQL, когато използвате UNION, EXCEPT или INTERSECT

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Оптимизация на заявки в PostgreSQL. EXPLAIN Basics – Част 1

  2. PostgreSQL ILIKE заявка с SQLAlchemy

  3. Уникално ограничение с условия в MYSQL

  4. PostgreSQL заявка с 'ANY' не работи

  5. Как работи Abs() в PostgreSQL