Wednesday 15 July 2015

tsql - Full Outer Self Join -


इस सवाल का पहले से ही एक उत्तर है: < / P>

  • 1 उत्तर

    समस्या को वापस करना है ऐसी पंक्तियां जिनमें नल भी शामिल हैं नीचे तालिका बनाने के लिए एसक्यूएल कोड है और इसे नमूना डेटा के साथ पॉप्युलेट कर रहा है।

    मुझे नीचे की उम्मीद है, लेकिन क्वेरी शून्य मानों के साथ दो पंक्तियों को नहीं दिखाती है।

     src_t1 id1_t1 id2_t1 val_t1 Src_t2 id1_t2 id2_t2 val_t2 bzz 4 aww 100 bww 1 axx 200 bxx 2 ayy 300  

    डेटा:

      टेबल नमूना बनाएं (src varchar (6), id1 varchar (6) , आईडी 2 VARCHAR (6), वैल फ्लोट); मूल्यों में (नमूना, आईडी 1, आईडी 2, वैल) मूल्य ('a', 'w', 'w', 100), ('b', 'w', 'w', 1), ('a',) 'बी', 'बी', 'एक्स', 'एक्स', 2) ',' जेड ', 4);   

    यह मेरा परीक्षण क्वेरी है I यह परिणाम नहीं दिखाता है जब t1.src = 'a' और t1.id1 = 'y' या जब t2.src = 'b' और t2.id1 = 'z'

    क्यों?

    सही क्वेरी क्या है?

      SELECT t1.src, t1.id1, ​​t1.id2, t1.val, t2.src src2, t2.id1, ​​t2 के रूप में .id2, t2.val नमूना से t1 पूर्ण बाहरी सम्मिलित करें t2 पर t1.id1 = t2.id1 और t1.id2 = t2.id2 WHERE (t1.src = 'a' और t2.src = 'b') या ( T1.src नल है और t1.id1 नल है और t1.id2 नल है) या (टी 2 एसआरसी है नाल और टी 2.आईडी 1 शून्य है और टी 2.आईडी 2 है नाल)   

    I ON खंड को भी WHERE खंड में शर्तों को आगे बढ़ाने का प्रयास किया है।

    TIA। <

    WHERE खंड बहुत देर से मूल्यांकन करता है, आपकी क्वेरी को आंतरिक रूप से शामिल करने में प्रभावी ढंग से परिवर्तित करता है।

    इसके बजाय, अपनी क्वेरी इस तरह लिखें उचित जॉइन वाक्यविन्यास का उपयोग कर:

      का चयन करें t1.src, t1.id1, ​​t1.id2, t1.val, t2.src को src2, t2.id1, ​​t2.id2, t2.val FROM (नमूना से * चयन करें जहां src = 'a') t1 पूर्ण बाहरी जुड़ें (नमूना से * चयन करें जहां src = 'b') टी 2 ऑन टी 1 पर। T1.id1 = t2.id1 और t1.id2 = t2.id2  < / पूर्व> 

    इस परिणाम सेट प्रदान:

      src id1 id2 val src2 id1 id2 val ---- ---- ---- ----------- -------- ---   

    अपडेट >:
    नोट भी दो उप-प्रश्नों का इस्तेमाल करने के लिए स्रोत तालिका को दो विशिष्ट relvars में स्पष्ट रूप से अलग करने के लिए। मैंने अपनी पहली प्रस्तुतिकरण पर एक मिनट के लिए इसे याद किया।

No comments:

Post a Comment