الانتقال إلى المحتوى الرئيسي

السؤال

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

الإجابة

يمكنك اتباع النهج التالي:
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 فسيفشل النهج المذكور أعلاه.
آخر تعديل في ٢٩ يونيو ٢٠٢٦