मेरे पास निम्न तालियां हैं:
बनाओ टेबल कंपनी (कंपनीयूनिक्यूड बीजीएसियल प्राइमरी कीज नल , नाम VARCHAR (150) नल नहीं); तालिका आइटम बनाएं (मदिन्यूयुन्युआइडी प्रमुख प्राथमिक कुंजी नहीं, कंपनी, यूनीक्यूड बिगिनल रिकॉर्डेस कंपनी बेईफ़ीबल इंफिटेबल डिफ्रारेड नाम, वीएआरएआरएआर (150) नल, नोड टाइमसमधे के बिना समय क्षेत्र डिफाल्ट अब ());
आवेदन के जीवनकाल में नई कंपनियों और वस्तुओं को तालिकाओं में जोड़ दिया जाता है। मैं एक एसक्यूएल क्वेरी बनाना चाहूंगा जो कि एक नई तिथि के मुताबिक शुरू की गई तिथि से "नई जोड़े गए कंपनियों" का चयन करेगी:
(कंपनी से * चुनें) आइटम से जहां जोड़ा गया दिनांक> 2014-10-25 '))
उपरोक्त अच्छा नहीं है क्योंकि आइटम जो 2014-10-25 के बाद जोड़े गए थे और उन कंपनियों के हैं जो पहले से मौजूद हैं भी चयन किया जा
उदाहरण के लिए, 2014-10-20 से कंपनी
तालिका का एक स्नैपशॉट इस तरह दिख सकता है:
1 एएए 2 बीबीबी 3 सीसीसी < / कोड> और तालिका आइटम दिखेंगे:
1 1 111 2014-10-01 2 2 222 2014-10-10 3 2 333 2014-10- 10 4 3 444 2014-10-15
पर 2014-10-26 में निम्नलिखित अभिलेख जोड़े गए:
तालिका कंपनी
< कोड> 4 डीडीडी
तालिका आइटम
5 1 555 2014-10-26 6 3 663 2014-10-26 7 4 777 2014-10- 27
मैंने इस क्वेरी को जोड़ने का प्रयास किया है:
<पूर्व> (कंपनी से * चुनें) जहां कंपनी की कंपनी में शामिल है (आइटम से अलग कम्पनी की वस्तु का चयन करें जहां AddDate & gt; '2014-10-25') और कंपनी में शामिल नहीं है (आइटम से जोड़ा गया विशिष्ट कंपनी का चयन करें, जहां जोड़ा गया & lt; = '2014-10-25'))
लेकिन मैं खाली हो रहा हूं परिणाम, केवल 4 डीडीडी प्राप्त करने के लिए क्वेरी क्या होनी चाहिए?
एक विरोधी का उपयोग करें अर्ध में शामिल हो। आमतौर पर सबसे तेज़ और क्लीनर नहीं
से:
चुनें से कंपनी सी जहां मौजूद नहीं है (जहां से आइटम का चयन 1 जोड़ा गया & lt; '2014-10-25' और Companyuniqueid = c.companyuniqueid);
यह रिटर्न देता है ऐसी कंपनियां जिनके पास कोई दिनांक नहीं है जो किसी दिनांक को पूर्व-डेटिंग करता है।
आइटम के बिना और संभावित रूप से उन वस्तुओं के साथ जिनमें आईएस नाल को जोड़ने के लिए
।
नए आइटम वाले कंपनियों के लिए परिणाम को सीमित करने के लिए, जोड़ें:
जहां मौजूद है (सेलेक्ट 1 से आइटम जोड़ी गयी & gt; = '2014-10- 25 'और companyuniqueid = c.companyuniqueid)
लेकिन अस्पष्टता से बचने और चीजों को सरल बनाने के लिए तालिका जोड़ा गया जोड़ा गया
तालिका कंपनी
को जोड़ने पर विचार करें ।
मूल प्रश्न क्यों काम नहीं कर रहा था?
संभवत: नहीं >>
नल
कोड> मान ।
आपका कॉलम item.companyuniqueid
अनुमति देता है NULL
मान। आपका सबक्विरी:
आइटम से अलग कम्पनी की सूचना का चयन करें जहां AddDate & lt; = '2014-10-25'
... शायद एक शून्य
मान उस स्थिति में, यह अभिव्यक्ति कभी भी TRUE
:
companyuniqueid नहीं है (& lt; ऊपर subquery & gt;)
रिटर्न < कोड> गलत या NULL
("अज्ञात") यदि सेट में कोई NULL
मान शामिल है लेकिन केवल TRUE
हालत के रूप में WHERE
योग्य होगा इसलिए कोई पंक्ति नहीं लौटाई गई है।
यदि उपरोक्त उपरोक्त से ऊपर कोई पंक्ति वापस नहीं आएगा, तो नहीं
अभिव्यक्ति TRUE
पर मूल्यांकन करेगी , जब तक बाईं ओर नहीं नल
है।
असल में, नहीं में (& lt; subquery & gt;) से बचें
जहां आप कर सकते हैं मौजूद नहीं है
लगभग हमेशा श्रेष्ठ है।
अगर आप इसका उपयोग करते हैं, तो अपने कोड के बारे में पता करें NULL
मान अधिक विवरण:
Comments
Post a Comment