मेरे पास ओरेकल (+) बाएं/दाएं परिदृश्य में शामिल होने के बारे में एक प्रश्न है जहां 2 टेबल 2 कॉलम पर शामिल हो गए थे लेकिन एक कॉलम (+) के साथ था लेकिन दूसरा (+) के बिना था। मैं प्रश्नों के एक पूरे समूह को बदलने की कोशिश कर रहा हूं और उन्हें उचित जुड़ाव में बदल रहा हूं और इस बारे में उत्सुक हूं।

(+) जॉइन का उपयोग करने वाली क्वेरी काम करती है लेकिन जब एक उचित बाएं/दाएं में परिवर्तित होती है तो परिणाम अलग होते हैं। नमूना कोड देखें।

--पुराना

select *
from tbl1 a, tbl2 b
where a.col1 = b.col1 (+)
and a.col2 = b.col2

--परिवर्तित

select *
from tbl1 a
left join tbl2 b on a.col1 = b.col1 and a.col2 = b.col2

क्या CONVERTED कोड को पुराने की तरह ही काम करने का कोई तरीका है?

धन्यवाद।

रुपये..

-2
RickshaW 8 अगस्त 2019, 02:09

2 जवाब

सबसे बढ़िया उत्तर

आपकी पहली क्वेरी left outer join नहीं करेगी लेकिन यह inner join करेगी क्योंकि (+) के बिना शर्त है, इसलिए शामिल होने के नए प्रारूप का उपयोग पठनीयता और कम जटिलता के लिए अधिक उपयुक्त है।

यदि आप वास्तव में (+) का उपयोग करने वाले पुराने जॉइन प्रारूप से चिपके रहना चाहते हैं तो आप निम्न कोड का उपयोग कर सकते हैं।

select *
from tbl1 a, tbl2 b
where a.col1 = b.col1 (+)
and a.col2 = b.col2 (+)

उपरोक्त कोड उचित left outer join करेगा क्योंकि तालिका से संबंधित सभी शर्तों को अब (+) के साथ टैग किया गया है

लेकिन, यह अनुशंसा की जाती है कि आप नए जॉइन प्रारूप का उपयोग करें, अर्थात LEFT JOIN सिंटैक्स का उपयोग करें।

आशा है, यह आपके संदेहों को दूर कर देगा।

चीयर्स !!

0
Tejash 8 अगस्त 2019, 08:32

यदि आप केवल एएनएसआई सिंटैक्स में कनवर्ट करना चाहते हैं, तो आपको पता होना चाहिए कि आपकी पुरानी क्वेरी को आंतरिक जॉइन के रूप में निष्पादित किया जाता है न कि बाहरी जॉइन के रूप में। परिवर्तित क्वेरी होनी चाहिए:

select *
  from tbl1 a
  join tbl2 b on (
       b.col1 = a.col1
   and b.col2 = a.col2
  )

यदि आपको लगता है कि आप एक बग पर ठोकर खा चुके हैं, और क्वेरी को बाहरी जुड़ाव के रूप में निष्पादित किया जाना चाहिए, तो आपकी क्वेरी होगी:

select *
  from tbl1      a
  left join tbl2 b on (
       b.col1 = a.col1
   and b.col2 = a.col2
  )

यदि आप मूल क्वेरी के रूप में उसी गलती को दोहराना चाहते हैं, यानी एक बाहरी जुड़ाव के रूप में दिखाई दे रहा है, जबकि वास्तव में एक आंतरिक जुड़ाव के रूप में निष्पादित किया जा रहा है ... क्वेरी होगी:

select *
  from tbl1 a
  left join tbl2 b on (
       b.col1 = a.col1       
  )
 where b.col2 = a.col2
0
Ronnis 8 अगस्त 2019, 09:57