Sol bir birleştirmeyle yapılamayacak doğru bir birleştirme ile yapılabilecek hiçbir şey (bildiğim) yoktur. Ancak bazen sol birleşimlerle sözdizimi daha çirkin olur. Diyelim ki aşağıdaki tablolarınız var:
Persons
ID | Name
Orders
ID | CustomerId | other unimportant stuff
SpecialOrderDetails
ID | OrderId | other stuff
Diyelim ki veritabanınızdaki tüm kişilerin bir listesini ve özel sipariş ayrıntılarıyla sahip oldukları siparişleri almanız gerekiyor (tüm siparişlerin özel sipariş ayrıntılarına sahip olmadığını söyleyeceğiz). Yani normalde insanlardan siparişlere sol birleştirme yaparsınız. Ama sonra özel sipariş detaylarına katılmak zorundasınız. Orada bir iç birleşim kullanırsanız, insanlardan emirlere, iç birleşmeye doğru sol birleşmeyi etkili bir şekilde yapar. IE: yapmak istediğiniz budur, ancak çalışmaz (özel bir siparişi olmayanları hariç tutar):
select p.*, o.*, d.*
from Persons p
left join Orders o on o.CustomerId = p.Id
inner join SpecialOrderDetails d on d.OrderId = o.Id
Böylece şu şekilde yeniden yazabilirsiniz:
--get all the people without a special order
select p.*, NULL, NULL, ... --NULLs placeholders for all the fields from OrderDetails and SpecialOrderDetails
from Persons p
left join Orders o on o.CustomerId = p.Id
left join SpecialOrderDetails d on d.OrderId = o.Id
where o.Id is null
union
--get all the people with a special order
select p.*, o.*, d.*
from Persons p
inner join Orders o on o.CustomerId = p.Id
inner join SpecialOrderDetails d on d.OrderId = o.Id
Tam olarak açık değil (yorum yok), ancak iş yapıyor. Bu, bir kerelik bir şeyden daha fazlası ise (yani, bir gün geri gelip bir gün bakımını yapmak zorunda kalacak bir şey), doğru bir birleşimi kullanmak niyetin ne olduğunu daha net hale getirebilir.
select p.*, o.*, d.*
from Orders o
inner join SpecialOrderDetails d on d.OrderId = o.Id
right join Persons p on p.Id = o.CustomerId
Bu biraz daha özlü ve açıktır (ancak sadece okuyan herkes doğru birleşimleri anlarsa). Bunun sol birleşimlerle yazılabileceğini, ancak iç içe bir birleşim gerektirdiğini unutmayın (bu, muhtemelen sağ birleşimlere göre daha az kişi tarafından bilinir).
select p.*, o.*, d.*
from Persons p
left join Orders o
inner join SpecialOrderDetails d on d.OrderId = o.Id
on o.CustomerId = p.Id
Bu noktada, en açık olanın ve çoğu insanın ne anlayacağının bir seçimidir (iç içe birleştirme olarak adlandırıldığını bilmiyorsanız bu sözdizimini nasıl google'a çevireceğinizi biliyor musunuz?).
Kısacası, kesinlikle doğru birleşimlere ihtiyacınız yoktur , ancak okumayı kolaylaştırabilirler.