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

Risolto il problema con "ERRORE: la colonna "colname" non esiste" in PostgreSQL quando si utilizza UNION, EXCEPT o INTERSECT

Se ricevi "ERRORE:la colonna "colname" non esiste" ” in PostgreSQL quando si utilizza un operatore come UNION , EXCEPT , o INTERSECT , è possibile che tu stia tentando di fare riferimento a una colonna con alias in base al nome della colonna.

Quando si utilizzano operatori come UNION , INTERSECT e EXCEPT , se una colonna ha un alias, dovrai utilizzare tale alias in qualsiasi ORDER BY clausola che fa riferimento a quella colonna.

Per correggere l'errore, fai semplicemente riferimento alla colonna con il suo alias.

Oppure puoi rimuovere del tutto l'alias e fare riferimento direttamente al nome della colonna.

Esempio di errore

Ecco un esempio di codice che produce l'errore:

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

Risultato:

ERROR:  column "teachername" does not exist
LINE 4: ORDER BY TeacherName ASC;

Qui non ho usato l'alias in ORDER BY clausola che ha provocato l'errore.

Soluzione 1

Un modo per risolvere questo problema è utilizzare l'alias in ORDER BY clausola:

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

Soluzione 2

Un'altra opzione è rimuovere del tutto l'alias:

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