Al usar INTERSECT
de PostgreSQL operador, si encuentra un error que dice "ERROR:cada consulta INTERSECT debe tener el mismo número de columnas “, es porque hay una discrepancia en el número de columnas devueltas por las consultas a ambos lados de INTERSECT
operador.
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
INTERSECT
SELECT StudentId, StudentName FROM Students;
Resultado:
ERROR: each INTERSECT 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
INTERSECT
SELECT StudentName FROM Students;
Resultado:
teachername ------------- Bill Warren
Otra opción es agregar la columna relevante al primer SELECT
declaración:
SELECT TeacherId, TeacherName FROM Teachers
INTERSECT
SELECT StudentId, StudentName FROM Students;
Resultado:
teacherid | teachername -----------+------------- 6 | Bill
Como demuestra este ejemplo, se pueden devolver filas diferentes según la opción que elija.
También podemos usar INTERSECT ALL
, que incluye valores duplicados:
SELECT TeacherId, TeacherName FROM Teachers
INTERSECT ALL
SELECT StudentId, StudentName FROM Students;
Resultado:
teacherid | teachername -----------+------------- 6 | Bill
Esto también podría arrojar resultados iguales o diferentes, según los datos.