sql - टी-एसक्यूएल मामले खंड:एक बाहरी जॉइन के साथ WHEN नाखून निर्दिष्ट करने पर जारी




tsql sql-server-2012 (2)

निम्नलिखित प्रश्न सही ढंग से सभी वर्तमान / भावी ग्राहकों के रिकॉर्ड को प्रदर्शित करता है चाहे उन्हें आदेश दिया गया हो या नहीं। लेकिन नीचे दिए गए SELECT कथन के YesNO उर्फ हमेशा 1 लौट रहा है जब कुछ मामलों में o.OrderID शून्य है (यानी, जब एक परिप्रेक्ष्य ग्राहक ने अभी तक कोई आदेश नहीं रखा है)। क्यूं कर? मुझे लगता है कि नीचे दिया गया मामला सही है (जैसा कि इस प्रतिक्रिया में दिखाया गया है)। मैं SQL Server 2012 का उपयोग कर रहा हूँ नोट : कृपया ध्यान रखें कि हालांकि ऑर्डरआइडी एक पीके है, अगर इसमें शामिल होने की स्थिति पूरी नहीं हुई है तो ओजर जॉइन में ऑर्डर टेबल के अन्य सभी कॉलम के साथ यह हमेशा रिक्त होगा।

SELECT c.customerID, o.OrderID, CASE When o.OrderID is NULL Then 0 Else 1 End as YesNO
FROM Customers c
LEFT JOIN Orders o
 ON c.customerID = o.customerID

Answers

ISNULL का उपयोग करके देखें

मुझे पूरा यकीन है कि इसका कारण यह है कि जब आप नल की तुलना नल करते हैं तो नल नल होता है, इस प्रकार झूठ, इसलिए यह आपके ELSE 1 का मूल्यांकन क्यों करता है

SELECT c.customerID, o.OrderID, CASE When ISNULL(o.OrderID, 0) = 0 Then 0 Else 
1 End as YesNO
FROM Customers c
LEFT JOIN Orders o
 ON c.customerID = o.customerID

अंतर्निहित एएनएसआई सिंटैक्स में शामिल होना पुराना, कम स्पष्ट और अनुशंसित नहीं है।

इसके अलावा, रिलेशनल बीजगणित WHERE क्लॉज और INNER JOIN में भविष्यवाणियों की अदलाबदल करने की इजाजत देता है, इसलिए WHERE क्लॉज के साथ INNER JOIN प्रश्नों को भविष्यवाणियों द्वारा पुन: व्यवस्थित किया जा सकता है।

मैं आपको सबसे अधिक संभव तरीके से प्रश्नों को लिखने की सलाह देता हूं।

कभी-कभी इसमें INNER JOIN अपेक्षाकृत "अधूरा" शामिल होता है और WHERE फ़िल्टरिंग मानदंडों की सूचियां आसानी से रखरखाव करने के लिए WHERE में कुछ मानदंड डालते हैं।

उदाहरण के लिए, इसके बजाए:

SELECT *
FROM Customers c
INNER JOIN CustomerAccounts ca
    ON ca.CustomerID = c.CustomerID
    AND c.State = 'NY'
INNER JOIN Accounts a
    ON ca.AccountID = a.AccountID
    AND a.Status = 1

लिखना:

SELECT *
FROM Customers c
INNER JOIN CustomerAccounts ca
    ON ca.CustomerID = c.CustomerID
INNER JOIN Accounts a
    ON ca.AccountID = a.AccountID
WHERE c.State = 'NY'
    AND a.Status = 1

लेकिन यह निश्चित रूप से निर्भर करता है।





sql tsql sql-server-2012