Om du får "FEL:kolumnen "colname" existerar inte' ” i PostgreSQL när du använder en operator som UNION
, EXCEPT
, eller INTERSECT
, kan det vara så att du försöker referera till en aliaskolumn med dess kolumnnamn.
När du använder operatorer som UNION
, INTERSECT
och EXCEPT
, om en kolumn har ett alias, måste du använda det aliaset i valfri ORDER BY
klausul som refererar till den kolumnen.
För att åtgärda felet hänvisar du bara till kolumnen med dess alias.
Eller så kan du ta bort aliaset helt och hållet och referera till kolumnnamnet direkt.
Exempel på fel
Här är ett exempel på kod som ger felet:
(SELECT TeacherName t FROM Teachers)
EXCEPT
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Resultat:
ERROR: column "teachername" does not exist LINE 4: ORDER BY TeacherName ASC;
Här använde jag inte aliaset i ORDER BY
klausul som resulterade i felet.
Lösning 1
Ett sätt att lösa det här problemet är att använda aliaset i ORDER BY
klausul:
(SELECT TeacherName t FROM Teachers)
EXCEPT
(SELECT StudentName FROM Students)
ORDER BY t ASC;
Lösning 2
Ett annat alternativ är att ta bort aliaset helt och hållet:
(SELECT TeacherName FROM Teachers)
EXCEPT
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;