खैर, यह है
SELECT
t1.*
FROM
table1 t1 -- inner join t1
INNER JOIN
(table2 t2 LEFT JOIN table3 t3 ON t3.table3_ID = t2.table2_ID) -- with this
ON t2.table2_ID = t1.table1_ID -- on this condition
तो मूल रूप से, पहले आप बाईं t3 साथ t2 शामिल हों शामिल होने के स्थिति के आधार पर,: आपरेशन के आदेश ..
SELECT
t1.*
FROM
table1 t1
INNER JOIN table2 t2
LEFT JOIN table3 t3 ON t3.table3_ID = t2.table2_ID
ON t2.table2_ID = t1.table1_ID
के रूप में लिखा जा सकता है table3_ID = table2_ID, तो आप आंतरिक शामिल हों t1 table2_ID = table1_ID पर t2 के साथ।
अपने दूसरे उदाहरण में आप पहली बार INNER टी 1 के साथ टी 1 में शामिल हों, और उसके बाद परिणामस्वरूप आंतरिक तालिका तालिका 3_ID = table1_ID पर तालिका t3 के साथ जुड़ें।
SELECT
t1.*
FROM
(table1 t1 INNER JOIN table2 t2 ON t2.table2_ID = t1.table1_ID) -- first inner join
LEFT JOIN -- then left join
table3 t3 ON t3.table3_ID = t2.table2_ID -- the result with this
संपादित
मैं माफी माँगता हूँ: के रूप में
SELECT
t1.*
FROM
table1 t1
INNER JOIN table2 t2 ON t2.table2_ID = t1.table1_ID
LEFT JOIN table3 t3 ON t3.table3_ID = t2.table2_ID
फिर से लिखा जा सकता है। मेरी पहली टिप्पणी गलत थी। दो प्रश्न एक ही परिणाम उत्पन्न करेंगे लेकिन प्रदर्शन में कोई अंतर हो सकता है क्योंकि पहली क्वेरी कुछ मामलों में दूसरी क्वेरी की तुलना में धीमी गति से प्रदर्शन कर सकती है (जब तालिका 1 में केवल तालिका 2 में तत्वों का सबसेट होता है) बाएं जॉइन के रूप में पहले निष्पादित किया जाना चाहिए - और केवल तब table1 के साथ छेड़छाड़ की। दूसरी क्वेरी के विपरीत जो क्वेरी ऑप्टिमाइज़र को यह काम करने की अनुमति देता है।
स्रोत
2009-07-07 20:23:00
क्या आप उन्हें निष्पादित करते समय वही परिणाम देते हैं? –
मुझे जाने के लिए +1 "एचएम ..." – Tomalak
यह पहले की तुलना में दूसरे को समझना बहुत आसान है - भले ही आप पहले व्यक्ति में LOJ के आस-पास (माता-पिता) डाल दें। इस पर एक अच्छा जवाब वोट करने के लिए तत्पर हैं। –