问题
如何验证两个查询返回相同的结果集?
答案
您可以使用以下方法
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_Q2
此示例使用 CTE 计算这两个查询中每一行的 cityHash 值的总和,如果两个结果集相同,则返回 1
。
使用一些整数序列数据和一些漂亮的格式
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 Pretty
将返回
┏━━━━━━━━━━━━━━┓
┃ Q1_equals_Q2 ┃
┡━━━━━━━━━━━━━━┩
│ 1 │
└──────────────┘
虽然这在许多情况下都很方便,但不能将其视为验证所有类型结果集相等的灵丹妙药,并且使用它时存在一些注意事项,例如,如果任何行包含 NULL
值,则上述方法将失败。