sql >> Base de Datos >  >> RDS >> SQLite

Solucionar error:"Los SELECT a la izquierda y a la derecha de UNION no tienen el mismo número de columnas de resultados" en SQLite

Si obtiene "Error:en preparación, los SELECT a la izquierda y a la derecha de UNION no tienen la misma cantidad de columnas de resultados..." cuando intenta usar UNION operador en SQLite, es porque uno de los SELECT declaraciones está devolviendo más columnas que el otro.

Cuando usas UNION operador, ambos SELECT las declaraciones deben devolver el mismo número de columnas.

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

Ejemplo de error

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

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

Resultado:

Error: in prepare, SELECTs to the left and right of UNION do not have the same number of result columns (1)

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
-----------
Ben        
Bill       
Cathy      
Ein        
Faye       
Jet        
Spike      
Warren     

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          Faye       
1          Warren     
2          Ben        
2          Jet        
3          Cathy      
3          Spike      
4          Cathy      
4          Ein        
5          Bill       
5          Warren     
6          Bill       

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