Sol Dış Birleşimden Döndürülen Varsayılan Boş Değerleri Değiştirin


99

Sol dış birleştirme kullanarak üç tablodan veri döndüren bir Microsoft SQL Server 2008 sorgum var. Çoğu zaman, ikinci ve üçüncü tablolarda veri yok ve bu nedenle sol dış birleşim için varsayılan olduğunu düşündüğüm bir boş değer alıyorum. Select deyimindeki varsayılan değerleri değiştirmenin bir yolu var mı? Bir tablo değişkenini seçebileceğim bir çözümüm var, ancak biraz kirli geliyor.

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'

Mümkünse Miktar ve Normal Fiyatın varsayılan olarak sıfır olmasını istiyorum.


Not: Bu gönderideki yanıtlardan bazıları MSFT sql-server dışındaki veritabanları ile ilgilidir ve bu yanıtın diğer bağlamlar için arama sonuçları sayfalarında da görünmesine neden olur.
dreftymac

Yanıtlar:


140

Bu kadar kolay

IsNull(FieldName, 0)

Veya daha tamamen:

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
Kolay olması gerektiğini biliyordum ama nedense bunu nasıl yapacağım konusunda bloke olmuştum. Teşekkürler.
Brett Bim

46
MySQL ise, IsNull 'IFNULL' ile değiştirilmelidir. Teşekkürler.
Dhanushka

17
PostgreSQL'de "COALESCE" gibi görünüyor . MySQL için kılavuz sayfası buradadır: "IFNULL" . Standarttan emin değilim.
David TONHOFER

3
DB2'de yanıt 'veritabanlarını değiştir' gibi görünüyor.
rtf

2
SQLite için olacak IFNULL.
Chintan Shah

12

Varsa MySQLveya SQLitedoğru anahtar kelime IFNULL(değil 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

MySQL

COALESCE(field, 'default')

Örneğin:

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

Ayrıca, COALESCE işlevine NULLgöre kontrol etmek için birden çok sütun kullanabilirsiniz . Örneğin:

mysql> SELECT COALESCE(NULL, 1, NULL);
        -> 1
mysql> SELECT COALESCE(0, 1, NULL);
        -> 0
mysql> SELECT COALESCE(NULL, NULL, NULL);
        -> NULL
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.