Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Correção “ERROR 1222 (21000):As instruções SELECT usadas têm um número diferente de colunas” ao usar UNION no MySQL


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        |
+-----------+-------------+