Hvis du får "FEJL:kolonnen "colname" eksisterer ikke' ” i PostgreSQL, når du bruger en operator såsom UNION
, EXCEPT
, eller INTERSECT
, kan det være, at du forsøger at henvise til en kolonne med alias ved dens kolonnenavn.
Når du bruger operatorer såsom UNION
, INTERSECT
og EXCEPT
, hvis en kolonne har et alias, så skal du bruge dette alias i enhver ORDER BY
klausul, der refererer til den kolonne.
For at rette fejlen skal du blot henvise til kolonnen ved dens alias.
Eller du kan fjerne aliaset helt og referere til kolonnenavnet direkte.
Eksempel på fejl
Her er et eksempel på kode, der producerer fejlen:
(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;
Her brugte jeg ikke aliaset i ORDER BY
klausul, som resulterede i fejlen.
Løsning 1
En måde at løse dette problem på er at bruge aliaset i ORDER BY
klausul:
(SELECT TeacherName t FROM Teachers)
EXCEPT
(SELECT StudentName FROM Students)
ORDER BY t ASC;
Løsning 2
En anden mulighed er at fjerne aliaset helt:
(SELECT TeacherName FROM Teachers)
EXCEPT
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;