عند استخدام IN أو EXISTS لتصفية صفوف الاستعلام الخارجي، لا تؤدي كثرة المطابقات الداخلية إلى إنشاء نسخ إضافية من الصف الخارجي. كلا الشرطين يقرر قبول الصف أو رفضه. لذلك فإن وجود ثلاثة طلبات للعميل نفسه لا يجعله يظهر ثلاث مرات بسبب هذين الشرطين.
في حالة IN، يكفي أن تساوي القيمة الخارجية إحدى القيم الداخلية. وفي حالة EXISTS المترابط، يكفي وجود صف يحقق شرط الربط. إذا كانت المقارنة نفسها مستخدمة، يمكن للصيغتين اختيار مجموعة العملاء نفسها، مع بقاء اختلافات محتملة في قيمة التعبير المنطقية عندما تدخل NULL في الحساب.
مثال
WITH orders AS (
SELECT 1 AS customer_id
UNION ALL SELECT 1
)
SELECT 1 AS customer_id
WHERE 1 IN (SELECT customer_id FROM orders);
هذا لا يعني أن الشرطين يحذفان التكرارات الأصلية من المصدر الخارجي. إذا احتوى ذلك المصدر على صفوف مكررة، فقد تبقى في النتيجة.
باختصار: تكرار المطابقات الداخلية لا يضاعف الصف الخارجي عند التصفية باستخدام IN أو EXISTS.
هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.