PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Correggi "ERRORE: voce della clausola FROM mancante per la tabella" in PostgreSQL quando si utilizza UNION, EXCEPT o INTERSECT

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.