डिफ़ॉल्ट बाहरी मानों को लेफ्ट आउटर जॉइन से लौटाएं


97

मेरे पास एक Microsoft SQL Server 2008 क्वेरी है जो तीन बाहरी तालिकाओं का डेटा बाईं ओर के बाहरी जोड़ से देता है। कई बार, दूसरी और तीसरी तालिका में कोई डेटा नहीं होता है और इसलिए मुझे एक शून्य मिलता है जो मुझे लगता है कि बाएं बाहरी जुड़ने के लिए डिफ़ॉल्ट है। क्या चयन कथन में डिफ़ॉल्ट मानों को बदलने का कोई तरीका है? मेरे पास एक वर्कअराउंड है जिसमें मैं टेबल चर में चयन कर सकता हूं लेकिन यह थोड़ा गंदा लगता है।

SELECT iar.Description, iai.Quantity, iai.Quantity * rpl.RegularPrice as 'Retail', 
iar.Compliance FROM InventoryAdjustmentReason iar
LEFT OUTER JOIN InventoryAdjustmentItem iai  on (iar.Id = iai.InventoryAdjustmentReasonId)
LEFT OUTER JOIN Item i on (i.Id = iai.ItemId)
LEFT OUTER JOIN ReportPriceLookup rpl on (rpl.SkuNumber = i.SkuNo)
WHERE iar.StoreUse = 'yes'

मैं चाहूंगा कि अगर संभव हो तो क्वांटिटी और रेग्युलरप्राइस को शून्य पर डिफ़ॉल्ट करें।


नोट: इस पोस्ट के कुछ उत्तर MSFT sql-server के अलावा अन्य डेटाबेस के साथ डील करते हैं, जिसके कारण यह उत्तर उन अन्य संदर्भों के लिए खोज परिणाम पृष्ठों पर दिखाई देता है।
dreftymac

इसे भी देखें: stackoverflow.com/questions/799375/…
dreftymac

जवाबों:


136

यह उतना ही आसान है

IsNull(FieldName, 0)

या अधिक पूरी तरह से:

SELECT iar.Description, 
  ISNULL(iai.Quantity,0) as Quantity, 
  ISNULL(iai.Quantity * rpl.RegularPrice,0) as 'Retail', 
  iar.Compliance 
FROM InventoryAdjustmentReason iar
LEFT OUTER JOIN InventoryAdjustmentItem iai  on (iar.Id = iai.InventoryAdjustmentReasonId)
LEFT OUTER JOIN Item i on (i.Id = iai.ItemId)
LEFT OUTER JOIN ReportPriceLookup rpl on (rpl.SkuNumber = i.SkuNo)
WHERE iar.StoreUse = 'yes'

4
मुझे पता था कि यह आसान होना था लेकिन किसी कारण से, मुझे यह करना बंद कर दिया गया था। धन्यवाद।
ब्रेट बिम्ब

44
यदि यह MySQL है, तो IsNull को 'IFNULL' से बदल दिया जाना चाहिए। धन्यवाद।
धनुष्का

17
PostgreSQL में, यह "COALESCE" प्रतीत होता है । MySQL के लिए, मैनुअल पेज यहाँ है: "IFNULL" । मानक के बारे में निश्चित नहीं है।
16:31 पर डेविड टोनहोफर जू

3
DB2 में उत्तर 'स्विच डेटाबेस' प्रतीत होता है।
आरटीएफ

1
SQLite के लिए, यह होगा IFNULL
चिंतन शाह

11

MySQLया SQLiteसही कीवर्ड के मामले में IFNULL(नहीं ISNULL) है।

 SELECT iar.Description, 
      IFNULL(iai.Quantity,0) as Quantity, 
      IFNULL(iai.Quantity * rpl.RegularPrice,0) as 'Retail', 
      iar.Compliance 
    FROM InventoryAdjustmentReason iar
    LEFT OUTER JOIN InventoryAdjustmentItem iai  on (iar.Id = iai.InventoryAdjustmentReasonId)
    LEFT OUTER JOIN Item i on (i.Id = iai.ItemId)
    LEFT OUTER JOIN ReportPriceLookup rpl on (rpl.SkuNumber = i.SkuNo)
WHERE iar.StoreUse = 'yes'

5

माई एसक्यूएल

COALESCE(field, 'default')

उदाहरण के लिए:

  SELECT
    t.id,
    COALESCE(d.field, 'default')
  FROM
     test t
  LEFT JOIN
     detail d ON t.id = d.item

इसके अलावा, आप COALESCE फ़ंक्शन NULLद्वारा उनकी जांच करने के लिए कई कॉलम का उपयोग कर सकते हैं । उदाहरण के लिए:

mysql> SELECT COALESCE(NULL, 1, NULL);
        -> 1
mysql> SELECT COALESCE(0, 1, NULL);
        -> 0
mysql> SELECT COALESCE(NULL, NULL, NULL);
        -> NULL
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.