Se você está recebendo "ERROR 1222 (21000):as instruções SELECT usadas têm um número diferente de colunas" ao usar o
UNION cláusula em uma consulta MySQL, provavelmente é porque o número de colunas retornadas por cada SELECT afirmação é diferente. Por exemplo, o primeiro
SELECT pode retornar duas colunas, mas a segunda SELECT declaração retorna três. Para corrigir esse problema, certifique-se de que
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 1222 (21000): The used SELECT statements have a different number of columns
Aqui, o primeiro
SELECT retorna uma coluna (TeacherName ), mas o segundo SELECT retorna duas colunas (StudentId e StudentName ). Solução
A maneira de corrigir esse problema é garantir que
SELECT instruções retornam o mesmo número de colunas Então, usando o exemplo acima, podemos remover a coluna extra do nosso segundo
SELECT demonstração:SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students; Resultado:
+-------------+ | TeacherName | +-------------+ | Warren | | Ben | | Cathy | | Bill | | Faye | | Jet | | Spike | | Ein | +-------------+
Ou podemos adicionar outra coluna ao primeiro
SELECT demonstração:SELECT TeacherId, TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students; Resultado:
+-----------+-------------+ | TeacherId | TeacherName | +-----------+-------------+ | 1 | Warren | | 2 | Ben | | 3 | Cathy | | 4 | Cathy | | 5 | Bill | | 6 | Bill | | 1 | Faye | | 2 | Jet | | 3 | Spike | | 4 | Ein | | 5 | Warren | +-----------+-------------+
Esteja ciente de 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; Resultado:
+-----------+-------------+ | TeacherId | TeacherName | +-----------+-------------+ | 1 | Warren | | 2 | Ben | | 3 | Cathy | | 4 | Cathy | | 5 | Bill | | 6 | Bill | | 1 | Faye | | 2 | Jet | | 3 | Spike | | 4 | Ein | | 5 | Warren | | 6 | Bill | +-----------+-------------+