Se você está recebendo "ERRO:a coluna "colname" não existe' ” no PostgreSQL ao usar um operador como
UNION
, EXCEPT
, ou INTERSECT
, pode ser que você esteja tentando fazer referência a uma coluna com alias pelo nome da coluna. Ao usar operadores como
UNION
, INTERSECT
e EXCEPT
, se uma coluna tiver um alias, você precisará usar esse alias em qualquer ORDER BY
cláusula que faz referência a essa coluna. Para corrigir o erro, basta referenciar a coluna pelo seu alias.
Ou você pode remover o alias completamente e fazer referência ao nome da coluna diretamente.
Exemplo de erro
Aqui está um exemplo de código que produz o erro:
(SELECT TeacherName t FROM Teachers)
EXCEPT
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Resultado:
ERROR: column "teachername" does not exist LINE 4: ORDER BY TeacherName ASC;
Aqui eu não usei o alias no
ORDER BY
cláusula que resultou no erro. Solução 1
Uma maneira de corrigir esse problema é usar o alias no
ORDER BY
cláusula:(SELECT TeacherName t FROM Teachers)
EXCEPT
(SELECT StudentName FROM Students)
ORDER BY t ASC;
Solução 2
Outra opção é remover completamente o alias:
(SELECT TeacherName FROM Teachers)
EXCEPT
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;