sql >> Databasteknik >  >> RDS >> PostgreSQL

Åtgärda "FEL:kolumnen "colname" existerar inte" i PostgreSQL när du använder UNION, EXCEPT eller INTERSECT

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;

  1. Hur Acos() fungerar i PostgreSQL

  2. Fyll i en rullgardinsruta från en mySQL-tabell i PHP

  3. Är det möjligt att använda användardefinierade aggregat (clr) med fönsterfunktioner (över)?

  4. Avancerad partitionsmatchning för partitionsmässig koppling