PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Correção de ‘ERRO:  coluna “colname” não existe’ no PostgreSQL ao usar UNION, EXCEPT ou INTERSECT


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;