sql >> Base de Datos >  >> RDS >> Mysql

Arreglar "ERROR 1222 (21000):Las declaraciones SELECT utilizadas tienen un número diferente de columnas" cuando se usa UNION en MySQL

Si obtiene "ERROR 1222 (21000):las declaraciones SELECT utilizadas tienen un número diferente de columnas" cuando se usa UNION cláusula en una consulta de MySQL, probablemente se deba a que el número de columnas devueltas por cada SELECT declaración es diferente.

Por ejemplo, el primer SELECT declaración puede devolver dos columnas, pero el segundo SELECT declaración devuelve tres.

Para solucionar este problema, asegúrese de SELECT declaraciones devuelven el mismo número de columnas.

Ejemplo de error

Aquí hay un ejemplo de código que produce el error:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students;

Resultado:

ERROR 1222 (21000): The used SELECT statements have a different number of columns

Aquí, el primer SELECT declaración devuelve una columna (TeacherName ), pero el segundo SELECT declaración devuelve dos columnas (StudentId y StudentName ).

Solución

La forma de solucionar este problema es asegurarse de que tanto SELECT declaraciones devuelven el mismo número de columnas

Entonces, usando el ejemplo anterior, podemos eliminar la columna adicional de nuestro segundo SELECT declaración:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Resultado:

+-------------+
| TeacherName |
+-------------+
| Warren      |
| Ben         |
| Cathy       |
| Bill        |
| Faye        |
| Jet         |
| Spike       |
| Ein         |
+-------------+

O podemos agregar otra columna a la primera SELECT declaración:

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

Tenga en cuenta que puede obtener diferentes resultados según la opción que elija. Esto se debe a que UNION devuelve filas distintas de forma predeterminada. Cuando agregamos otra columna, existe la posibilidad de que una fila previamente duplicada ahora se convierta en una fila única, según el valor de la columna adicional.

También podemos usar UNION ALL , que devuelve 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        |
+-----------+-------------+