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

Correção de "ERRO: cada consulta EXCEPT deve ter o mesmo número de colunas" no PostgreSQL


Ao usar o EXCEPT do PostgreSQL operador, se você encontrar um erro que diz “ERRO:cada consulta EXCEPT deve ter o mesmo número de colunas “, é porque há uma incompatibilidade no número de colunas retornadas pelas consultas em ambos os lados do EXCEPT operador.

A maneira de corrigir isso é garantir que tanto SELECT instruções retornam o mesmo número de colunas.

Exemplo de erro


Aqui está um exemplo de código que produz o erro:
SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentId, StudentName FROM Students;

Resultado:
ERROR:  each EXCEPT query must have the same number of columns
LINE 3: SELECT StudentId, StudentName FROM Students;

Aqui, o primeiro SELECT retorna uma coluna (TeacherName ), mas o segundo SELECT retorna duas colunas (StudentId e StudentName ).

Solução


A solução é garantir que tanto SELECT instruções retornam o mesmo número de colunas

Usando o exemplo acima, podemos remover a coluna extra do nosso segundo SELECT demonstração:
SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentName FROM Students;

Resultado:
 teachername 
-------------
 Cathy
 Ben

Outra opção é adicionar a coluna relevante ao primeiro SELECT demonstração:
SELECT TeacherId, TeacherName FROM Teachers
EXCEPT
SELECT StudentId, StudentName FROM Students;

Resultado:
 teacherid | teachername 
-----------+-------------
         3 | Cathy
         4 | Cathy
         1 | Warren
         5 | Bill
         2 | Ben

Como este exemplo demonstra, diferentes linhas podem ser retornadas dependendo de qual opção você escolher.

Também podemos usar EXCEPT ALL , que retorna valores duplicados:
SELECT TeacherId, TeacherName FROM Teachers
EXCEPT ALL
SELECT StudentId, StudentName FROM Students;

Resultado:
 teacherid | teachername 
-----------+-------------
         3 | Cathy
         4 | Cathy
         1 | Warren
         5 | Bill
         2 | Ben

Isso também pode retornar resultados iguais ou diferentes, dependendo dos dados.