it-swarm.com.de

Vom linken äußeren Join zurückgegebene Standard-Nullwerte ersetzen

Ich habe eine Microsoft SQL Server 2008-Abfrage, die Daten aus drei Tabellen mithilfe einer linken äußeren Verknüpfung zurückgibt. Häufig sind in der zweiten und dritten Tabelle keine Daten vorhanden. Daher erhalte ich eine Null, die meiner Meinung nach die Standardeinstellung für Left Outer Join ist. Gibt es eine Möglichkeit, die Standardwerte in der select-Anweisung zu ersetzen? Ich habe eine Problemumgehung, indem ich eine Tabellenvariable auswählen kann, die sich jedoch etwas schmutzig anfühlt.

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'

Ich möchte, dass die Menge und der reguläre Preis standardmäßig auf Null gesetzt werden, wenn dies möglich ist.

84
Brett Bim

Das ist so einfach wie

IsNull(FieldName, 0)

Oder vollständiger:

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'
126
Michael Haren

Im Fall von MySQL oder SQLite lautet das richtige Schlüsselwort IFNULL (nicht 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'
6
Zendem

MySQL

COALESCE(field, 'default')

Beispielsweise:

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

Sie können auch mehrere Spalten verwenden, um ihre Funktion NULL mit COALESCE zu überprüfen. Beispielsweise:

mysql> SELECT COALESCE(NULL, 1, NULL);
        -> 1
mysql> SELECT COALESCE(7, 1, NULL);
        -> 7
mysql> SELECT COALESCE(NULL,NULL,NULL);
        -> NULL
3
Amir Forsati