سؤال

لنفترض أن لدينا جدول A:

itemid mark
1      5
2      3

والجدول ب:

itemid mark
1      3
3      5

أريد الانضمام إلى A*B على A.itemid=B.itemid بالطريقتين اليمنى واليسرى.أي.نتيجة:

itemid A.mark B.mark
1      5      3
2      3      NULL
3      NULL   5

هل هناك طريقة للقيام بذلك في استعلام واحد في MySQL؟

هل كانت مفيدة؟

المحلول

يُطلق عليها اسم "صلة خارجية كاملة" وهي غير مدعومة أصلاً في MySQL، انطلاقًا من خصائصها مستندات.يمكنك التغلب على هذا القيد باستخدام UNION كما هو موضح في التعليقات على الصفحة التي قمت بالارتباط بها.

[عدل] بما أن الآخرين نشروا مقتطفات، ها أنت ذا.يمكنك رؤية الشرح على الصفحة المرتبطة.

SELECT *
FROM A LEFT JOIN B ON A.id = B.id
UNION ALL
SELECT *
FROM A RIGHT JOIN B ON A.id = B.id
WHERE A.id IS NULL

نصائح أخرى

يمكن القيام ببعض الأعمال ولكن هنا بعض SQL

select distinct T.itemid, A.mark as "A.mark", B.mark as "B.mark"
    from (select * from A union select * from B) T 
    left join A on T.itemid = A.itemid 
    left join B on T.itemid = B.itemid;

يعتمد هذا على الصلة اليسرى، التي تُرجع كافة الصفوف الموجودة في الجدول الأصلي (في هذه الحالة، هذا هو الجدول الفرعي T).إذا لم تكن هناك أي تطابقات في الجدول المرتبط، فسيتم تعيين العمود على NULL.

هذا يعمل بالنسبة لي على SQL Server:

select isnull(a.id, b.id), a.mark, b.mark
from a 
full outer join b on b.id = a.id
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top