أين أضع شرط حالة الطلب مع LEFT JOIN؟

متوسطقراءة دقيقةآخر تحديث 3 أكتوبر 2026

SQL قواعد البيانات

الإجابة

عند استخدام LEFT JOIN، يؤثر موضع الشرط في الصفوف التي يحتفظ بها الاستعلام. إذا أردنا عرض جميع العملاء مع طلباتهم المدفوعة فقط، نضع شرط الدفع داخل ON. بذلك يبحث الربط عن الطلبات المدفوعة بوصفها المطابقات المقبولة، ويحتفظ بالعميل حتى إذا لم يجد طلبا يحقق هذه الشروط.

أما وضع o.status = 'paid' داخل WHERE فيختبر الصفوف الناتجة بعد الربط. الصف الذي لا يملك طلبا مطابقا يحتوي على NULL في حالة الطلب، فلا يحقق المقارنة ويستبعد. كذلك يستبعد العميل الذي لا يملك سوى طلبات بحالات أخرى.

مثال

SELECT c.id, o.id AS order_id
FROM customers AS c
LEFT JOIN orders AS o
  ON o.customer_id = c.id
 AND o.status = 'paid';

اختيار الموضع الصحيح يبدأ بتحديد المطلوب: هل حالة الطلب شرط لقبول المطابقة، أم شرط لاستبعاد صفوف النتيجة النهائية؟ هذا الفرق أساسي في التقارير التي يجب أن تحتفظ بجميع العملاء.

باختصار: ضع شرط الطلب داخل ON عندما تريد الاحتفاظ بالعميل حتى عند غياب طلب يحقق الشرط.

هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.

اختبر فهمك

ما نتيجة الاستعلام الأخير الذي يضع شرط paid داخل ON؟

CREATE TABLE customers (id INT PRIMARY KEY);
CREATE TABLE orders (
  id INT PRIMARY KEY,
  customer_id INT,
  status VARCHAR(10)
);
INSERT INTO customers VALUES (1), (2), (3);
INSERT INTO orders VALUES (10, 1, 'paid'), (20, 2, 'pending');
SELECT c.id, o.id AS order_id
FROM customers AS c
LEFT JOIN orders AS o
  ON o.customer_id = c.id AND o.status = 'paid'
ORDER BY c.id;