sql >> Base de Datos >  >> RDS >> PostgreSQL

Arreglar "ERROR:cada consulta EXCEPTO debe tener la misma cantidad de columnas" en PostgreSQL

Al usar EXCEPT de PostgreSQL operador, si encuentra un error que dice "ERROR:cada consulta EXCEPTO debe tener la misma cantidad de columnas “, es porque hay una discrepancia en la cantidad de columnas devueltas por las consultas en ambos lados de EXCEPT 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
EXCEPT
SELECT StudentId, StudentName FROM Students;

Resultado:

ERROR:  each EXCEPT 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
EXCEPT
SELECT StudentName FROM Students;

Resultado:

 teachername 
-------------
 Cathy
 Ben

Otra opción es agregar la columna relevante al primer SELECT declaración:

SELECT TeacherId, TeacherName FROM Teachers
EXCEPT
SELECT StudentId, StudentName FROM Students;

Resultado:

 teacherid | teachername 
-----------+-------------
         3 | Cathy
         4 | Cathy
         1 | Warren
         5 | Bill
         2 | Ben

Como demuestra este ejemplo, se pueden devolver filas diferentes según la opción que elija.

También podemos usar EXCEPT ALL , que devuelve valores duplicados:

SELECT TeacherId, TeacherName FROM Teachers
EXCEPT ALL
SELECT StudentId, StudentName FROM Students;

Resultado:

 teacherid | teachername 
-----------+-------------
         3 | Cathy
         4 | Cathy
         1 | Warren
         5 | Bill
         2 | Ben

Esto también podría arrojar resultados iguales o diferentes, según los datos.