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;