Pregunta
¿Cómo puedo verificar que dos consultas devuelvan los mismos conjuntos de resultados?
Respuesta
Puede utilizar el siguiente enfoque:
WITH
(
SELECT sum(cityHash64(*))
FROM
(
-- your query 1 here
-- SELECT ...
)
) AS q1_resultset_hash,
(
SELECT sum(cityHash64(*))
FROM
(
-- your query 2 here
-- SELECT ...
)
) AS q2_resultset_hash
SELECT equals(q1_resultset_hash,q2_resultset_hash) as Q1_equals_Q2El ejemplo usa una CTE para calcular la suma del valor cityHash de cada fila en estas dos consultas, y devolverá 1 si los dos conjuntos de resultados son idénticos.
Usando algunos datos de una secuencia de enteros y formato Pretty:
WITH
(
SELECT sum(cityHash64(*))
FROM
(
SELECT *
FROM numbers(10)
ORDER BY number DESC
)
) AS q1_resultset_hash,
(
SELECT sum(cityHash64(*))
FROM
(
SELECT *
FROM numbers(10)
ORDER BY number ASC
)
) AS q2_resultset_hash
SELECT q1_resultset_hash = q2_resultset_hash AS Q1_equals_Q2
FORMAT Prettydevolverá:
┏━━━━━━━━━━━━━━┓
┃ Q1_equals_Q2 ┃
┡━━━━━━━━━━━━━━┩
│ 1 │
└──────────────┘Aunque esto puede ser útil en muchos casos, no puede considerarse una solución infalible para validar la igualdad de los conjuntos de resultados para todo tipo de datos, y su uso tiene algunas limitaciones; por ejemplo, si alguna fila contiene valores NULL, el enfoque anterior fallará.