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.