Se ricevi "ERRORE:voce della clausola FROM mancante per la tabella ” in PostgreSQL quando si utilizza un operatore come UNION
, INTERSECT
o EXCEPT
, potrebbe essere perché stai qualificando il nome di una colonna con il nome della tabella.
Per risolvere il problema, rimuovi il nome della tabella o utilizza un alias di colonna.
Esempio di errore
Ecco un esempio di codice che produce l'errore:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY Teachers.TeacherName ASC;
Risultato:
ERROR: missing FROM-clause entry for table "teachers" LINE 4: ORDER BY Teachers.TeacherName ASC;
In questo caso ho provato a ordinare i risultati in base al TeacherName
colonna, ma ho qualificato quella colonna con il nome della tabella (ho usato Teachers.TeacherName
per fare riferimento al nome della colonna).
Tabelle di riferimento come questa non funzionano quando si ordinano i risultati di UNION
, EXCEPT
, o INTERSECT
.
Soluzione 1
Un modo per risolvere questo problema è rimuovere il nome della tabella da ORDER BY
clausola:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Soluzione 2
Un altro modo per risolverlo è utilizzare un alias per la colonna:
(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY t ASC;
Con questa opzione, assegniamo un alias alla colonna, quindi facciamo riferimento a tale alias in ORDER BY
clausola.