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.