Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

كيفية التحقق مما إذا كان استعلامان يُرجعان مجموعات النتائج نفسها

السؤال

كيف يمكنني التحقق من أن استعلامين يعيدان مجموعات النتائج نفسها؟

الإجابة

يمكنك اتباع النهج التالي:

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 فسيفشل النهج المذكور أعلاه.

Navigation