sql - conditional joining in oracle -


सशर्त शामिल होने के वक्तव्य: -

उच्च स्तरीय वर्णन: - सम्मिलित करें तालिका दो स्तंभों पर आधारित यदि संयोजन मौजूद नहीं है तो एक मेज पर शामिल हों -

विस्तृत तालिका -

  तालिका टैब 1 बनाओ (टैब 1_col1 नंबर रिक्त नहीं है , टैब 1_col2 नंबर नल, टैब 1_col3 varchar (10));  

लुकअप तालिका

  तालिका बनाने के लिए lkp1 (lkp_col1 संख्या शून्य नहीं, lkp_col2 संख्या शून्य नहीं, lkp_col3 संख्या शून्य नहीं, lkp_col4 varchar (10));  

सम्मिलित करें स्टेटमेंट - टैब 1

  टैब 1 मानों में डालें (10,101, 'ए'); टैब 1 मानों में डालें (12,101, 'बी'); टैब 1 मानों में डालें (11,102, 'सी'); टैब 1 मानों में डालें (13,103, 'बी'); टैब 1 मानों में डालें (14,104, 'सी'); टैब 1 मानों में डालें (15,108, 'ए'); टैब 1 मानों में डालें (16,102, 'डी');  

लुकअप तालिका lkp1

  lkp1 मानों में डालें (10,101,50, 'पिक'); Lkp1 मानों में डालें (10,101,50, 'पिक'); Lkp1 मानों में डालें (11,102,100, 'SKIP'); Lkp1 मानों में डालें (11,110,50, 'पिक'); Lkp1 मानों में डालें (13,103,40, 'पिक'); Lkp1 मानों में डालें (13,103,60, 'पिक'); एलकेपी 1 मानों में डालें (14,19 9, 100, 'पिक'); Lkp1 मानों में डालें (15,115,80, 'पिक'); Lkp1 मानों में डालें (15,115,20, 'पिक');  

आवश्यकता था - के आधार पर तालिका में शामिल हों tab1_col1 = lkp_col1 और tab1_col2 = lkp_col2 लुकअप तालिका डेटा lkp_col4 फ़िल्टर = यदि रिकार्ड के लिए लुकअप तालिका में मौजूद नहीं छोड़ें तो देना डिफ़ॉल्ट मान (99.99) (टैब 1 तालिका से सभी अभिलेख चयनित होना चाहिए)।

मैंने यह प्रश्न बनाया और यह ठीक काम कर रहा था।

  का चयन करें tab1_col1, tab1_col2, NVL (lkp_col3, '99 .99 ') "LKP_COL3" tab1 से, (lkp1 से चुनें * कहां lkp_col4 = की पसंद') एलकेपी कहां tab1_col1 = lkp_col1 (+) और tab1_col2 = lkp_col2 (+)  

को फिर अब आवश्यकता बदल पहले जांच कर लें tab1_col1 = lkp_col1 और tab1_col2 = lkp_col2 लुकअप तालिका इस संयोजन के लिए डेटा मिलने से नहीं है, तो फिर जांच साथ tab1_col1 = lkp_col1 यदि यह नहीं भी तो dafault मूल्य देना उपलब्ध है

डाटाबेस -। Oracle 10g

अब तक मैं क्या कोशिश की है

बहुत सारे निशान और त्रुटि के बाद मैं आउटपुट प्राप्त करने में सक्षम हूं। हालांकि, इस का उपयोग करने के लिए एक बेहतर या आसान तरीका है?

  का चयन करें tab1_col1, tab1_col2, LKP_COL3 tab1 से, (lkp1 से चुनें * कहां lkp_col4 = की पसंद ') एलकेपी कहां tab1_col1 = lkp_col1 और tab1_col2 = lkp_col2 संघ सभी का चयन करें tab1_col1, tab1_col2, LKP_COL3 tab1 से, एलकेपी कहां tab1_col1 = lkp_col1 (+) और lKP_COL1 (lkp1 से कहां lkp_col4 = की पसंद 'का चयन करें *) || '-' || LKP_COL2 नहीं में (tab1_col1 का चयन करें || '-' tab1, lkp1 एलकेपी कहां tab1_col1 = lkp_col1 और tab1_col2 = lkp_col2 से || tab1_col2) आदेश 1  द्वारा 

निम्न परिणाम:

  | TAB1_COL1 | TAB1_COL2 | एलकेपी_कोल 3 | | ----------- | ----------- | ---------- | | 10 | 101 | 50 | | 11 | 102 | 50 | | 12 | 101 | 99.9 9 | | 13 | 103 | 40 | | 13 | 103 | 60 | | 14 | 104 | 100 | | 15 | 108 | 20 | | 15 | 108 | 80 | | 16 | 102 | 99.9 9 |  

इस क्वेरी द्वारा निर्मित किया गया:

  का चयन करें DISTINCT tab1.tab1_col1, tab1.tab1_col2, COALESCE (lkp1.lkp_col3, lkp2.lkp_col3, 99.99) " LKP_COL3 "टैब 1 से छोड़ें 1 पर टैक्सी 1। 1 टेब 1_col1 = lkp1.lkp_col1 और tab1.tab1_col2 = lkp1.lkp_col2 और lkp1.lkp_col4 = 'पिक' लेफ्ट जॉब lkp1 lkp2 ऑन टैब 1। 1 टेब 1_col1 = lkp2.lkp_col1 और lkp2.lkp_col4 = 'पिक 'आदेश द्वारा टैब 1.tab1_col1, tab1.tab1_col2;  

DISTINCT क्योंकि दूसरा बाएं (बाह्य) में शामिल होने के उत्पादन में अवांछित पुनरावृत्ति पैदा करता है।

इस का उल्लेख जोड़ा गया है


Comments

Popular posts from this blog

Member with no value in F# -

java - Joda Time Interval Not returning what I expect -

c# - Showing a SelectedItem's Property -