من الأخطاء الدقيقة كتابة EXISTS حول استعلام يستخدم COUNT(*) دون GROUP BY أو HAVING، مع الاعتقاد أنه يفحص وجود السجلات الأصلية. هذا الاستعلام التجميعي يعيد صفًا واحدًا يحتوي على العدد، حتى إذا كان العدد صفرًا. ولأن EXISTS يفحص وجود الصف، يصبح الشرط متحققًا.
لا يفحص الاختبار ما إذا كانت القيمة المعروضة أكبر من صفر. إنه يرى صف نتيجة التجميع فقط. إذا كان المطلوب وجود طلب مطابق، فاستخدم اختيارًا عاديًا مثل SELECT 1 مع شروط المطابقة. ويمكن أيضًا مقارنة نتيجة العد بالصفر، لكن ذلك يعبر عن الاختبار بطريقة مختلفة.
مثال
SELECT EXISTS (
SELECT COUNT(*)
FROM (SELECT 1 AS id) AS t
WHERE t.id = 99
) AS has_result_row;
وجود HAVING قد يستبعد صف التجميع، كما أن التجميع حسب عمود يغير شكل النتائج. لذلك ينطبق هذا الفخ على البنية المحددة المذكورة، وليس على كل استخدام لدوال التجميع.
باختصار: داخل EXISTS، صف يحمل العدد صفرًا يظل صفًا موجودًا ويحقق اختبار الوجود.
هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.