질문
두 쿼리가 동일한 결과 세트를 반환하는지 어떻게 확인할 수 있습니까?
답변
다음과 같이 진행할 수 있습니다:
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을 반환합니다.
일련의 정수 데이터와 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 Pretty다음이 반환됩니다:
┏━━━━━━━━━━━━━━┓
┃ Q1_equals_Q2 ┃
┡━━━━━━━━━━━━━━┩
│ 1 │
└──────────────┘이는 여러 상황에서 유용할 수 있지만, 모든 타입의 결과 집합 동등성을 검증하는 만능 해결책으로 볼 수는 없으며, 사용할 때 몇 가지 주의사항이 있습니다. 예를 들어 어떤 행에라도 NULL 값이 포함되어 있으면 위 방식은 실패합니다.