لماذا تتضاعف الصفوف عند ربط جدول بجدولين تابعين مستقلين؟

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

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

الإجابة

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

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

مثال

SELECT e.id, t.id AS task_id, v.id AS event_id
FROM employees AS e
INNER JOIN tasks AS t ON t.employee_id = e.id
INNER JOIN events AS v ON v.employee_id = e.id;

إذا كان للموظف ثلاث مهام وأربعة أحداث، فإن مساهمته تكون اثني عشر صفا. أما إذا غابت مطابقات أحد الطرفين في هذا المثال الداخلي، فلن يظهر الموظف.

باختصار: الربطان المستقلان يجمعان كل مطابقة من الطرف الأول مع كل مطابقة من الطرف الثاني للصف الرئيسي نفسه.

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

اختبر فهمك

كم صفا يعيد الاستعلام الأخير؟

CREATE TABLE employees (id INT PRIMARY KEY);
CREATE TABLE tasks (id INT PRIMARY KEY, employee_id INT);
CREATE TABLE events (id INT PRIMARY KEY, employee_id INT);
INSERT INTO employees VALUES (1);
INSERT INTO tasks VALUES (10, 1), (11, 1);
INSERT INTO events VALUES (20, 1), (21, 1), (22, 1);
SELECT e.id, t.id AS task_id, v.id AS event_id
FROM employees AS e
INNER JOIN tasks AS t ON t.employee_id = e.id
INNER JOIN events AS v ON v.employee_id = e.id;