variable statement not multiple into ejemplos condicion sql oracle select result

sql - statement - select into oracle procedure



Compruebe si dos "selectos" son equivalentes (4)

Corre ambos y compara los resultados. Utilice la operación EXCEPTO para restar el conjunto devuelto por la primera consulta del conjunto devuelto por la segunda consulta. Si el resultado es un conjunto vacío, entonces son equivalentes.

El problema con este método es que no prueba que dos consultas sean equivalentes para CUALQUIER base de datos. Depende del contenido de su base de datos. Por ejemplo, si su base de datos está vacía, entonces cualquiera de las dos declaraciones de selección son equivalentes de acuerdo con este método.

Probar la equivalencia simplemente analizando las consultas es un problema no resuelto AFAIK (pero no soy exactamente un gurú de la teoría de la base de datos, así que no confíes en mí en eso). Además, puedes ver esta pregunta: proving-sql-query-equivalency

¿Hay alguna forma de verificar si dos selecciones (no triviales) son equivalentes?

editar

Inicialmente esperaba una equivalencia formal entre dos selecciones, pero las respuestas en proving-sql-query-equivalency me detienen.

Para mi necesidad real, solo puedo verificar si los resultados (reales) de dos selecciones son los mismos.


No pude comentar sobre la respuesta dada por HAL9000 y quise señalar que MENOS no es un SQL estándar y no funciona en postgresql. Por lo tanto, necesitamos usar EXCEPTO

(select * from query1 EXCEPT select * from query2) UNION ALL (select * from query2 EXCEPT select * from query1)


Si desea comparar los resultados de la consulta, intente lo siguiente:

(select * from query1 MINUS select * from query2) UNION ALL (select * from query2 MINUS select * from query1)

Esto dará como resultado todas las filas que son devueltas por una sola de las consultas.


por

(select * from query1 EXCEPT select * from query2) UNION ALL (select * from query2 EXCEPT select * from query1)

Hice algunas pruebas en postgres 9.4 , y aquí están mis resultados.

[1] Menos no es compatible, por lo que debe usar EXCEPT según lo indicado por @Bogdan

[2] Usar solo EXCEPT no considera duplicados, así que tuve que usar EXCEPT ALL

[3] EXCEPT ALL requiere que el orden de las columnas en el resultado sea el mismo, por lo tanto, en la consulta anterior, QUERY1 y QUERY2 deben devolver el mismo orden de las columnas o tenemos que ajustar la consulta y asegurarnos de que el orden de las columnas sea el mismo. en lógica de aplicación)

Entonces, si tenemos en cuenta los 3 puntos, podemos estar 100% seguros de que los datos devueltos por dos consultas en el conjunto de datos dado son exactamente los mismos.

se actualizará si me encuentro con más casos de borde que pueden fallar.