ऐसा कुछ भी नहीं है (जो मुझे पता है) कि दाएं हाथ से काम किया जा सकता है जो बाएं हाथ से नहीं किया जा सकता है। लेकिन कभी-कभी बाएं जोड़ों के साथ वाक्य रचना बदसूरत होती है। मान लें कि आपके पास निम्नलिखित तालिकाएँ हैं:
Persons
ID | Name
Orders
ID | CustomerId | other unimportant stuff
SpecialOrderDetails
ID | OrderId | other stuff
मान लें कि आपको अपने डेटाबेस में सभी लोगों की एक सूची प्राप्त करने की आवश्यकता है और उनके पास कोई भी आदेश विशेष आदेश विवरण के साथ है (हम कहेंगे कि सभी आदेशों में विशेष आदेश विवरण नहीं हैं)। इसलिए आप आम तौर पर लोगों से ऑर्डर लेने के लिए लेफ्ट जॉइन करते हैं। लेकिन फिर आपको विशेष ऑर्डर विवरण में शामिल होना होगा। यदि आप वहां एक इनर जॉइन का उपयोग करते हैं, तो यह प्रभावी रूप से लेफ्ट जॉइन को लोगों से इनर जॉइन करने का आदेश देगा। IE: यह वह है जो आप करना चाहते हैं, लेकिन यह काम नहीं करता है (यह किसी को भी बाहर कर देगा जिसके पास कोई विशेष आदेश नहीं है):
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
तो आप इसे इस रूप में फिर से लिख सकते हैं:
--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
बिल्कुल स्पष्ट नहीं (कोई टिप्पणी नहीं मानते हुए), लेकिन यह काम करता है। अगर यह एक-से-अधिक है (यानी किसी को किसी दिन वापस आना है और किसी को बनाए रखना है) एक सही जुड़ाव का उपयोग करके यह स्पष्ट कर सकता है कि इरादा क्या था।
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
जो थोड़ा अधिक सक्सेसफुल और क्लीयर है (लेकिन केवल अगर कोई इसे पढ़ रहा है तो वह सही जोड़ समझता है)। ध्यान दें कि यह बाएं जोड़ों के साथ लिखा जा सकता है, लेकिन इसके लिए एक नेस्टेड जॉइन की आवश्यकता होती है (जो कि कम लोग संभवतः सही जॉइन से परिचित हैं)।
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
इस बिंदु पर, यह एक विकल्प है कि क्या सबसे स्पष्ट है और अधिकांश लोग क्या समझेंगे (क्या आप जानेंगे कि उस वाक्यविन्यास को कैसे Google करें यदि आपको नहीं पता था कि इसे नेस्टेड जॉइन कहा जाता है?)।
संक्षेप में, आप सख्ती नहीं करते सही जुड़ने की आवश्यकता , लेकिन वे इसे पढ़ना आसान बना सकते हैं।