左外部結合から返されたデフォルトのnull値を置き換える


97

左外部結合を使用して3つのテーブルからデータを返すMicrosoft SQL Server 2008クエリがあります。多くの場合、2番目と3番目のテーブルにはデータがないため、左外部結合のデフォルトであると思うnullを取得します。selectステートメントのデフォルト値を置き換える方法はありますか?私はテーブル変数に選択できるという回避策がありますが、少し汚れているように感じます。

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'

可能であれば、QuantityとRegularPriceのデフォルトをゼロに設定します。


注:この投稿の回答の一部はMSFT sql-server以外のデータベースを扱っているため、この回答は他のコンテキストの検索結果ページにも表示されます。
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
簡単でなければならないことはわかっていましたが、どういうわけか、どうすればいいのかわからなくなりました。ありがとう。
Brett Bim、

44
MySQLの場合、IsNullは「IFNULL」に置き換える必要があります。ありがとう。
ダヌシュカ2014

17
PostgreSQLでは「COALESCE」のようです。MySQLの場合、マニュアルページは"IFNULL"です。標準についてはわかりません。
David Tonhofer

3
DB2では、答えは「データベースの切り替え」のようです。
rtf

1
SQLiteの場合はになりますIFNULL
Chintan Shah 2017

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

MySQL

COALESCE(field, 'default')

例えば:

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

また、複数の列を使用しNULLCOALESCE関数で列を確認することもできます。例えば:

mysql> SELECT COALESCE(NULL, 1, NULL);
        -> 1
mysql> SELECT COALESCE(0, 1, NULL);
        -> 0
mysql> SELECT COALESCE(NULL, NULL, NULL);
        -> NULL
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.