[mysql] 왼쪽 외부 조인에서 반환 된 기본 Null 값 바꾸기

왼쪽 외부 조인을 사용하여 세 개의 테이블에서 데이터를 반환하는 Microsoft SQL Server 2008 쿼리가 있습니다. 여러 번, 두 번째 및 세 번째 테이블에 데이터가 없으므로 왼쪽 외부 조인의 기본값이라고 생각하는 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의 기본값을 0으로 설정하고 싶습니다.



답변

그것은만큼 쉽습니다

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'


답변

의 경우 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'


답변

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


답변