代码之家  ›  专栏  ›  技术社区  ›  Brett Bim

替换从左外部联接返回的默认空值

  •  77
  • Brett Bim  · 技术社区  · 16 年前

    我有一个MicrosoftSQLServer2008查询,它使用左外部联接从三个表返回数据。很多时候,第二个和第三个表中没有数据,所以我得到一个空值,我认为这是左外连接的默认值。是否有方法替换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'
    

    如果可能的话,我希望数量和正常价格默认为零。

    3 回复  |  直到 7 年前
        1
  •  149
  •   shsteimer    16 年前

    那很容易

    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'
    
        2
  •  19
  •   Emadpres    8 年前

    万一 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'
    
        3
  •  7
  •   Community Mohan Dere    6 年前

    MySQL

    COALESCE(field, 'default')
    

    例如:

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

    NULL 通过 COALESCE 功能。 例如:

    mysql> SELECT COALESCE(NULL, 1, NULL);
            -> 1
    mysql> SELECT COALESCE(0, 1, NULL);
            -> 0
    mysql> SELECT COALESCE(NULL, NULL, NULL);
            -> NULL
    
        4
  •  0
  •   Partha Prateem Patra user1320006    5 年前

    为了

    NVL(columnName,deafultValue) :-NVL用于将空值转换为查询输出中的默认值。如果你想用“NA”来替换空值,那么使用类似这样的东西。

    SELECT NVL(columnName,'NA') FROM tableName