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;