إتقان الانضمام الخارجي ثنائي الاتجاه في MySQL
عند العمل مع قواعد البيانات العلائقية، تعتبر القدرة على ربط الجداول بناءً على السمات المشتركة أمرًا حاسمًا. ومع ذلك، يواجه MySQL تحديًا عندما يتعلق الأمر بإجراء الانضمام الخارجي ثنائي الاتجاه، والذي يُشار إليه غالبًا باسم “الانضمام الخارجي الكامل”. دعنا نستكشف هذه المشكلة بالتفصيل ونكتشف الحل لتحقيق النتائج المرجوة.
فهم المشكلة
افترض وجود جدولين، A و B، بالبيانات التالية:
الجدول A
itemid | mark |
---|---|
1 | 5 |
2 | 3 |
الجدول B
itemid | mark |
---|---|
1 | 3 |
3 | 5 |
الهدف هو ربط هذه الجداول بناءً على itemid
، مما ينتج عنه نتائج تشمل جميع itemid
s من كلا الجدولين، مع العلامات المتطابقة أينما كان ذلك ممكنًا. يجب أن يبدو الناتج المتوقع كما يلي:
itemid | A.mark | B.mark |
---|---|---|
1 | 5 | 3 |
2 | 3 | NULL |
3 | NULL | 5 |
قيود MySQL
من النقاط الهامة التي يجب ملاحظتها هي أن MySQL لا يدعم بشكل أصلي الانضمام الخارجي الكامل. وفقًا لوثائق MySQL، يجب على المستخدمين الذين يحتاجون لهذه الوظيفة اللجوء إلى حلول بديلة. لحسن الحظ، هناك حل بسيط باستخدام عامل UNION
.
الحل
لتمثيل الانضمام الخارجي الكامل في MySQL، يمكنك دمج كل من الانضمام الأيسر والانضمام الأيمن باستخدام الاستعلام SQL التالي:
SELECT *
FROM A LEFT JOIN B ON A.itemid = B.itemid
UNION ALL
SELECT *
FROM A RIGHT JOIN B ON A.itemid = B.itemid
WHERE A.itemid IS NULL
تحليل الاستعلام
-
الانضمام الأيسر:
- الجزء الأول من الاتحاد هو انضمام أيسر. سيسترجع هذا جميع السجلات من الجدول A، بالإضافة إلى السجلات المتطابقة في الجدول B.
- في السيناريوهات التي لا توجد فيها مطابقة، ستظهر النتيجة من الجدول B كـ
NULL
.
SELECT * FROM A LEFT JOIN B ON A.itemid = B.itemid
-
الانضمام الأيمن:
- الجزء الثاني من الاتحاد يقوم بإجراء انضمام أيمن، ملتقطًا جميع السجلات من الجدول B فقط والسجلات المتطابقة من الجدول A.
- الشرط
WHERE A.itemid IS NULL
يضمن أننا نقوم فقط بإدراج الصفوف التي لا تمتلك مطابقة خاصة بها في الجدول A، مما يتجنب التكرارات.
SELECT * FROM A RIGHT JOIN B ON A.itemid = B.itemid WHERE A.itemid IS NULL
-
دمج النتائج:
- من خلال استخدام
UNION ALL
، نجمع نتائج كلا الاستعلامين. وهذا يعطينا نظرة شاملة على جميع itemids من كلا الجدولين، مع ملء العلامات المفقودة حسب الحاجة.
- من خلال استخدام
الخاتمة
بينما يفتقر MySQL إلى دعم مدمج للاشتراكات الخارجية الثنائية (أو الكاملة)، فإن الحل البديل باستخدام الانضمامات اليسرى واليمنى، بالتزامن مع عامل UNION
، يحقق بشكل فعال النتائج المرجوة. يوفر هذا الحل طريقة ميسرة لتكامل البيانات من جداول متعددة، مما يضمن حصولك على رؤى شاملة من استعلامات قاعدة البيانات الخاصة بك.
الآن يمكنك التعامل مع الانضمامات الخارجية في MySQL بثقة واستغلال قوة معالجة البيانات الفعالة في تطبيقاتك!