كيف أمنع تكرار الأزواج المعكوسة في self join؟

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

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

الإجابة

عند ربط جدول بنفسه لتكوين أزواج، قد يظهر الزوج مرتين: مرة بالترتيب الأول ومرة بالترتيب المعكوس. مثلا، يمكن أن يظهر الموظف 2 مع الموظف 5، ثم الموظف 5 مع الموظف 2. إذا كان المطلوب زوجا غير مرتب، فإن هذين الصفين يمثلان العلاقة نفسها ولا نحتاج إلى كليهما.

نستخدم مقارنة مثل a.id < b.id عندما تكون المعرّفات فريدة. تسمح هذه المقارنة باتجاه واحد فقط لكل زوج، وتمنع كذلك ربط الصف بنفسه. أما الشرط a.id <> b.id فيمنع الزوج الذاتي لكنه يبقي الاتجاهين، ولذلك لا يحقق المطلوب وحده.

مثال

SELECT a.id, b.id
FROM employees AS a
INNER JOIN employees AS b
  ON a.country_id = b.country_id
 AND a.id < b.id;

يعرض المثال أزواج الموظفين الذين يشتركون في بلد معلوم، مرة واحدة لكل زوج. ويمكن تطبيق الفكرة نفسها على أزواج الأفلام أو الكتب أو المشاركين في نشاط معين.

باختصار: استخدم مقارنة صارمة بين المعرّفات لتمنع الأزواج الذاتية والمعكوسة معا.

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

اختبر فهمك

أي شرط إضافي يعرض كل زوج من موظفي البلد نفسه مرة واحدة، دون ربط الموظف بنفسه؟

SELECT a.id, b.id
FROM employees AS a
INNER JOIN employees AS b
  ON a.country_id = b.country_id
 AND /* الشرط المطلوب */;