PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Napraw „BŁĄD:brak wpisu klauzuli FROM dla tabeli” w PostgreSQL podczas korzystania z UNION, EXCEPT lub INTERSECT

Jeśli otrzymujesz komunikat „BŁĄD:brak wpisu klauzuli FROM dla tabeli ” w PostgreSQL podczas używania operatora takiego jak UNION , INTERSECT lub EXCEPT , może to być spowodowane tym, że kwalifikujesz nazwę kolumny za pomocą nazwy jej tabeli.

Aby to naprawić, usuń nazwę tabeli lub użyj aliasu kolumny.

Przykład błędu

Oto przykład kodu, który generuje błąd:

(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY Teachers.TeacherName ASC;

Wynik:

ERROR:  missing FROM-clause entry for table "teachers"
LINE 4: ORDER BY Teachers.TeacherName ASC;

W tym przypadku próbowałem uporządkować wyniki według TeacherName kolumna, ale zakwalifikowałem tę kolumnę nazwą tabeli (użyłem Teachers.TeacherName odwoływać się do nazwy kolumny).

Tabele referencyjne takie jak ta nie działają podczas porządkowania wyników UNION , EXCEPT lub INTERSECT .

Rozwiązanie 1

Jednym ze sposobów rozwiązania tego problemu jest usunięcie nazwy tabeli z ORDER BY klauzula:

(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;

Rozwiązanie 2

Innym sposobem, aby to naprawić, jest użycie aliasu dla kolumny:

(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY t ASC;

Dzięki tej opcji przypisujemy alias do kolumny, a następnie odwołujemy się do tego aliasu w ORDER BY klauzula.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tablice liczb całkowitych Postgres jako parametry?

  2. Sprawdzanie PL/pgSQL, czy wiersz istnieje

  3. Jak oczyścić surowy SQL w Rails 4?

  4. Jak sprawdzić, czy w danym schemacie istnieje tabela?

  5. Testy topnienia PostgreSQL