Menu
CoddyTech

الربط الذاتي (Self Join)

جزء من قسم الأساسيات في رحلة SQL على Coddy. الدرس 46 من 72.

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

employee_idemployee_namemanager_id
1Minke2
2Temur3
3Tatjana4
4Marinela 

لدى كل موظف مدير باستثناء أعلى مدير، وكل مدير هو أيضًا موظف.

المشكلة: نريد معرفة اسم المدير لكل موظف.

SELECT e2.employee_id, e2.employee_name, e1.employee_name as manager_name
FROM employees as e1
JOIN employees as e2 ON e1.employee_id = e2.manager_id

نربط الجدول نفسه، لكننا نُسميه e1 في المرة الأولى وe2 في المرة الثانية. ويكون الربط بين الحقلين employee_id وmanager_id.

النتيجة:

employee_idemployee_namemanager_name
1MinkeTemur
2TemurTatjana
3TatjanaMarinela
challenge icon

التحدي

متوسط

الجداول والأعمدة المتاحة:

  • friends: id, name, friend_id

اعثر على أزواج الأصدقاء الذين تربطهم صداقة متبادلة (توجد صداقة متبادلة عندما تشير قيمة friend_id للشخص A إلى الشخص B، وتشير قيمة friend_id للشخص B إلى الشخص A). اعرض اسمي الصديقين في صف واحد. سمِّ العمودين friend1 وfriend2.

ملاحظة: أدرج في عبارة WHERE المعيار f1.id < f2.id (f1 وf2 اسمان مستعاران للنسختين من الجدول) حتى لا يتضمن أزواجًا مكررة 

جرّب بنفسك

-- اربط الجدول بنفسه حتى يتمكن صف واحد من إظهار شخصين مختلفين
SELECT ____ AS friend1, ____ AS friend2
FROM friends f1
JOIN friends f2 ON ____
-- احتفظ فقط بالأزواج التي يشير كل طرف فيها إلى الآخر
WHERE ____ AND f1.id < f2.id;
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس الأساسيات

تدرّب بنفسك: Playground لـ SQL