Al usar UNION
operador en PostgreSQL, si encuentra un error que dice "ERROR:cada consulta UNION debe tener la misma cantidad de columnas “, es porque hay una discrepancia en el número de columnas devueltas por las consultas a ambos lados de UNION
operador.
Este error ocurre cuando el número de columnas devueltas por cada SELECT
declaración es diferente.
La forma de solucionar esto es asegurarse de que tanto 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: each UNION query must have the same number of columns LINE 3: SELECT StudentId, StudentName FROM Students;
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 solución es asegurarse de que tanto SELECT
declaraciones devuelven el mismo número de columnas
Usando el ejemplo anterior, podemos eliminar la columna adicional de nuestro segundo SELECT
declaración:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;
O podemos agregar otra columna a la primera SELECT
declaración:
SELECT TeacherId, TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students;
Es importante tener 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;
Esto también puede arrojar resultados diferentes a los otros ejemplos.