跳转到主要内容

问题

如何验证两个查询是否返回相同的结果集?

答案

你可以按以下方式操作:
WITH
    (
        SELECT sum(cityHash64(*))
        FROM
        (
            -- 在此处填写您的查询 1
            -- SELECT ...
        )
    ) AS q1_resultset_hash,
    (
        SELECT sum(cityHash64(*))
        FROM
        (
            -- 在此处填写您的查询 2
            -- 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 值,上述方法就会失效。
最后修改于 2026年6月10日