sql >> Base de Datos >  >> RDS >> Oracle

Solucionar el error "ORA-01789:el bloque de consulta tiene un número incorrecto de columnas de resultados"

Si recibe el error "ORA-01789:el bloque de consulta tiene un número incorrecto de columnas de resultados" en Oracle Database, probablemente se deba a que está tratando de usar un operador como UNION , INTERSECT , o EXCEPT para ejecutar una consulta compuesta, pero el SELECT las declaraciones a ambos lados del operador devuelven un número diferente de columnas.

Para solucionar esto, simplemente asegúrese de que ambas consultas devuelvan el mismo número de columnas.

Ejemplo de error

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

SELECT EmployeeName FROM Employees
UNION
SELECT CustomerId, CustomerName FROM Customers;

Resultado:

ORA-01789: query block has incorrect number of result columns

Aquí, estoy usando UNION operador para crear una consulta compuesta. Desafortunadamente, recibo un error porque solo incluí una columna en la primera consulta, pero dos columnas en la segunda.

Solución

La forma de solucionar este problema es asegurarse de que ambas consultas devuelvan el mismo número de columnas.

Entonces podemos agregar una nueva columna al primer SELECT declaración:

SELECT EmployeeId, EmployeeName FROM Employees
UNION
SELECT CustomerId, CustomerName FROM Customers;

Resultado:

ID DE EMPLEADO NOMBRE DEL EMPLEADO
1 Bart
1 Mía
2 enero
2 Rohit
3 Ava
3 Pedro
4 Ava
4 Rohit
5 Monish
6 Monish
7 Monish

O podríamos eliminar una de las columnas de la segunda consulta:

SELECT EmployeeName FROM Employees
UNION
SELECT CustomerName FROM Customers;

Resultado:

NOMBRE DEL EMPLEADO
Ava
Bart
ene
Mía
Monish
Pedro
Rohit

Tenga en cuenta que puede obtener resultados muy diferentes según la opción que utilice. De hecho, obtuvimos resultados diferentes en nuestro ejemplo anterior.

Esto se debe a que UNION El operador devuelve filas distintas a menos que se agregue con ALL palabra clave. Cuando incluimos las columnas "ID", esto hizo que algunas filas fueran distintas cuando no lo hubieran sido si solo hubiéramos devuelto las columnas "nombre". Luego, cuando excluimos las columnas "ID", obtuvimos los valores únicos de las columnas "nombre".

Si realmente desea que se devuelvan valores duplicados, puede usar ALL palabra clave.

Por lo tanto, podemos modificar nuestro último ejemplo de la siguiente manera:

SELECT EmployeeName FROM Employees
UNION ALL
SELECT CustomerName FROM Customers;

Resultado:

NOMBRE DEL EMPLEADO
Bart
ene
Ava
Rohit
Monish
Monish
Monish
Mía
Rohit
Pedro
Ava
Monish
Monish