मेरे पास एक प्रश्न है, लेकिन मुझे वास्तव में यह नहीं पता कि यह कैसे पूछना है! मेरे साथ सहन करें:पोस्टग्रेस्क्ल - किसी तालिका में प्रविष्टियां कैसे प्राप्त करें जिनके पास किसी अन्य तालिका में कोई मिलान नहीं है
SELECT sc.*,
scd.siteid, scd.desc_frontend
FROM shipping_code sc
LEFT OUTER JOIN shipping_code_description scd
ON scd.shippingid=sc.shippingid
AND scd.siteid IN (SELECT siteid FROM site_international WHERE published='t')
ऊपर व्याख्या करने के लिए, हम शिपिंग (डिलीवरी) एक तालिका में कोड "shipping_code" कहा जाता है, और, क्योंकि हम एक बहु भाषा साइट है, तो हम भाषा विवरण के लिए एक और मेज है 'code_code_description' में उन कोडों का। हमारे पास "site_international" नामक एक तालिका भी है जिसमें निम्नलिखित फ़ील्ड हैं: 'साइटिड' (साइट की आईडी - उदाहरण के लिए यूके, डीई, एफआर .. (अंग्रेजी, जर्मन, फ्रेंच। ।) और 'प्रकाशित' (बूलियन क्षेत्र, यानी साइट को लाइव या नहीं है?)
चयन करें क्वेरी ऊपर केवल उन प्रकाशित साइटों के लिए उनकी भाषा विवरण के साथ सभी शिपिंग कोड, हो जाता है।
अब, हम यह भी जानना चाहते हैं कि कौन से शिपिंग कोड में कुछ साइट्स में विवरण नहीं हैं। यदि एक शिपिंग कोड पूरी तरह से नया है, तो उस कोड के लिए 1 पंक्ति वापस आ जाएगी (बाएं बाहरी जॉइन के कारण)। 'Scd.siteid' और 'scd.desc_frontend' शून्य होगा।
हालांकि, यदि यूके (अंग्रेजी) साइट के लिए कोई विवरण मौजूद है, लेकिन एफआर और डीई के लिए विवरण मौजूद नहीं है, तो उपर्युक्त क्वेरी केवल एक पंक्ति लौटाएगी, न कि तीन पंक्तियां। मैं कैसे बता सकता हूं कि एक विशेष शिपिंग कोड के लिए डीई और एफआर विवरण गायब हैं?
1) मैं किसी भी तरह यह सब एक क्वेरी के अंदर कर सकता है:
यहाँ मेरी विकल्प हैं। एक तरीका होना चाहिए (मैंने पहले कभी यूनियन, एक्सेप्ट आदि का उपयोग नहीं किया है और मुझे यकीन नहीं है कि क्या मुझे का उपयोग करना चाहिए)।
2) या मैं बस जहां प्रकाशित = 'टी'
और इसके बाद के संस्करण मुझे सभी प्रकाशित साइटों देना होगा site_international से चयन siteid के लिए एक और क्वेरी कर सकता है। फिर, उपर्युक्त बड़ी क्वेरी के प्रत्येक परिणाम के लिए PHP (जिसका उपयोग मैं अपनी साइट को कोड करने के लिए उपयोग कर रहा हूं) का उपयोग करके, मैं जांचता हूं और देखता हूं कि कोई विवरण गुम है या नहीं। जैसे उपर्युक्त साइटिड क्वेरी 3 आईडी (यूके, डीई, एफआर) वापस कर देगी। फिर यदि किसी विशेष शिपिंग कोड के लिए केवल एक यूके पंक्ति लौटा दी जाती है, तो मुझे पता चलेगा कि डीई और एफआर गायब हैं, और मैं इसे अपने क्लाइंट को ध्वजांकित कर सकता हूं।
कृपया सलाह दें कि बेहतर विकल्प "1" मौजूद है या नहीं?
बहुत धन्यवाद!
मुझे लगता है कि मैं इसे सिर्फ एक और बाएं बाहरी जॉइन के साथ हल करने में कामयाब रहा। आपके सहयोग के लिए धन्यवाद! आपके जवाब ने मुझे कुछ अलग करने की कोशिश की क्योंकि मेरे पास अन्य बाएं शामिल हैं, इसलिए मुझे किसी भी न्यूल की जांच करने की आवश्यकता नहीं थी, लेकिन इसके बजाय मैं दोनों नल और नल को चाहता था।तो मेरी पूछताछ के लिए एक और बाएं बाहरी जॉइन ठीक काम किया! अनुलेख बाएं जुड़ने और बाएं बाहरी जुड़ने के बीच कोई अंतर? – rishijd
बाएं, दाएं और पूर्ण जुड़ने वाले बाहरी जुड़ते हैं। कीवर्ड "बाहरी" आवश्यक नहीं है। –