왼쪽 외부 조인을 사용하여 세 개의 테이블에서 데이터를 반환하는 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