2013-02-13 39 views
5

मेरा उद्देश्य वास्तव में क्या करना है एक वाम बाहरी शामिल हों 4 वेन आरेख का उपयोग कर करने का इरादा रखता है वापस नहीं: SQL Diagrams:वाम बाहरी शामिल हों क्वेरी की उम्मीद पंक्तियों

enter image description here

मेरे क्वेरी किसी भी मान नहीं लौटा रहा है असल में, जहां वास्तव में, सलाहकार_Memberships_Lists के भीतर संग्रहीत कंसल्टेंट_Memberships के भीतर यह सब वापस लौटना चाहिए।

कृपया एक आसान समझने के लिए SQL Fiddle देखें:

SELECT * 
FROM consultant_memberships 
     LEFT OUTER JOIN consultant_memberships_list 
        ON consultant_memberships.`id` = 
         consultant_memberships_list.membership_id 
WHERE consultant_memberships_list.consultant_id = $id 
     AND consultant_memberships_list.membership_id IS NULL 

क्वेरी '5' प्रदर्शन के उद्देश्य से एक आईडी के रूप में कोशिश करते हैं और सही पंक्तियों बाहर लेने के लिए उपयोग कर रहा है।

+1

वर्तमान में आपके प्रश्न में लगभग कोई जानकारी नहीं है, केवल जानकारी के लिए कहीं और लिंक हैं। वे लिंक ठीक हैं, लेकिन आपके प्रश्न में आवश्यक जानकारी भी होनी चाहिए। – ruakh

+1

(इसके अलावा, आपका वाक्यांश - "वास्तव में, [मेरी क्वेरी] होना चाहिए [...]" - यह आपको लगता है जैसे आपने सही ढंग से प्रश्न लिखा है, और डीबीएमएस बस इसे गलत चला रहा है। आपको विश्वास दिलाता है, यह मामला नहीं है।) – ruakh

+0

(मैं खंडहर से सहमत हूं। मैंने शीर्षक में "सही" को "अपेक्षित" में बदल दिया है, और तटस्थ/गैर-आरोपक भाषा के उपयोग को प्रोत्साहित किया है।) –

उत्तर

13

आप वर्तमान क्वेरी पर consultant_id = 5WHERE खंड पर मूल रूप से INNER JOIN कर रही है। मेरा मानना ​​है कि आप वास्तव में उपयोग करना चाहते हैं:

SELECT * 
FROM consultant_memberships m 
LEFT OUTER JOIN consultant_memberships_list l 
    ON m.`id` = l.membership_id 
    AND l.consultant_id = 5 
WHERE l.membership_id IS NULL; 

SQL Fiddle with Demo

+0

@ ब्लूफेट - यह पूरी तरह से काम करता है और मैंने प्रक्रिया में बाएं बाहरी जॉइन के बारे में अधिक सीखा है। आपकी मदद के लिए धन्यवाद, मैं इसकी सराहना करता हूं। – Ben

+1

@ स्वेनगाली आपका स्वागत है, मदद करने में खुशी है। – Taryn

+2

+1 WHERE खंड में अनुमानित बाएं जॉइन की "बाहरी" -ता को अस्वीकार कर रहा है। बाहरी शामिल होने के बारे में सोचने का सबसे आसान तरीका यह है: यदि मिलान करने वाली पंक्ति नहीं मिलती है, तो एक डमी पंक्ति उत्पन्न होती है ताकि लौटने के लिए एक मिलान पंक्ति हो। जेनरेट की गई डमी पंक्ति पूरी तरह से पूर्ण मानों को शामिल करने जा रही है। तो WHERE खंड में कोई भी "पूर्ण नहीं है" भविष्यवाणी करता है जो उत्पन्न हुई सभी डमी पंक्तियों को बाहर करने जा रहा है। – spencer7593

2

उपयोग

SELECT * 
    FROM consultant_memberships 
     LEFT Outer JOIN consultant_memberships_list 
       ON consultant_memberships_list.membership_id = consultant_memberships.`id` 
       and consultant_memberships_list.consultant_id = 5 
where consultant_memberships_list.membership_id IS NULL; 

कहाँ खंड अपने प्रश्न में पहले इस्तेमाल देखें "consultant_memberships_list.consultant_id = 5" बाईं बाहरी की उपेक्षा की गई थी में शामिल होने के ।

+1

यदि आपने बताया कि आपने क्वेरी में क्या परिवर्तन किया है (यानी एक WHERE क्लॉज से एक ओएन क्लॉज पर एक अनुमान को स्थानांतरित करना), और यह उल्लेख क्यों है कि यह परिवर्तन आवश्यक है, तो यह अधिक उपयोगी हो सकता है। – spencer7593