2008-08-13 32 views
8

varsayalım bir tablo A vardır:Çift yönlü dış birleşim

itemid mark 
1  5 
2  3 

ve tablo B:

itemid mark 
1  3 
3  5 

Ben A * B katılmak isteyen A.itemid = B.itemid hem sağ ve sol yolları. i.e. sonuç:

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

MySQL'de bir sorguda bunu yapmanın bir yolu var mı?

cevap

6

Tam bir dış denilen katılıp değil onun docs bakılırsa, MySQL doğal desteklenen ediyor. Bağlandığım sayfadaki yorumlarda açıklandığı gibi, UNION kullanarak bu sınırlamayı aşabilirsiniz.

[değiştir] Diğerleri pasajlar yayınladığından, işte gidiyorsunuz. Bağlantılı sayfada açıklama görebilirsiniz.

2

bazı işi yapmak ama burada bu (bu bu durumda alt seçim tablosu T) orijinal tablodaki tüm satırları döndürür katılmak solda, güvenir bazı 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; 

olduğunu olabilir. Birleştirilmiş tabloda herhangi bir eşleşme yoksa, sütunu NULL olarak ayarlar.

-1

Bu SQL Server üzerinde benim için çalışıyor:

select isnull(a.id, b.id), a.mark, b.mark 
from a 
full outer join b on b.id = a.id 
+0

Soru açıkça belirtir MySQL – cdeszaq

İlgili konular