Als u "ERROR:ontbrekende FROM-clausule voor tabel" krijgt ” in PostgreSQL bij gebruik van een operator zoals UNION
, INTERSECT
, of EXCEPT
, het kan zijn dat u een kolomnaam kwalificeert met de tabelnaam.
Om dit op te lossen, verwijdert u de tabelnaam of gebruikt u een kolomalias.
Voorbeeld van fout
Hier is een voorbeeld van code die de fout veroorzaakt:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY Teachers.TeacherName ASC;
Resultaat:
ERROR: missing FROM-clause entry for table "teachers" LINE 4: ORDER BY Teachers.TeacherName ASC;
In dit geval heb ik geprobeerd de resultaten te ordenen op TeacherName
kolom, maar ik heb die kolom gekwalificeerd met de tabelnaam (ik gebruikte Teachers.TeacherName
om naar de kolomnaam te verwijzen).
Verwijzen naar tabellen zoals deze werkt niet bij het bestellen van de resultaten van UNION
, EXCEPT
, of INTERSECT
.
Oplossing 1
Een manier om dit probleem op te lossen is door de tabelnaam te verwijderen uit de ORDER BY
clausule:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Oplossing 2
Een andere manier om dit op te lossen is door een alias voor de kolom te gebruiken:
(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY t ASC;
Met deze optie wijzen we een alias toe aan de kolom en verwijzen we vervolgens naar die alias in de ORDER BY
clausule.