Ao usar o
UNION
operador no PostgreSQL, se você encontrar um erro que diz “ERRO:cada consulta UNION 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 UNION
operador. Este erro ocorre quando o número de colunas retornado por cada
SELECT
afirmação é diferente. 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
UNION
SELECT StudentId, StudentName FROM Students;
Resultado:
ERROR: each UNION 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
UNION
SELECT StudentName FROM Students;
Ou podemos adicionar outra coluna ao primeiro
SELECT
demonstração:SELECT TeacherId, TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students;
É importante observar que você pode obter resultados diferentes dependendo da opção escolhida. Isso ocorre porque
UNION
retorna linhas distintas por padrão. Quando adicionamos outra coluna, existe a possibilidade de que uma linha anteriormente duplicada agora se torne uma linha única, dependendo do valor da coluna extra. Também podemos usar
UNION ALL
, que retorna valores duplicados:SELECT TeacherId, TeacherName FROM Teachers
UNION ALL
SELECT StudentId, StudentName FROM Students;
Isso também pode retornar resultados diferentes para os outros exemplos.