我有以下查询:
SELECT item.`ID`, item.`Name`, item.`UnitCost`,
item.`Price`, discount.`rate`
FROM item
INNER JOIN discount ON discount.`ID`=item.`DiscountID`
WHERE item.`Code`=itemCode;
如果discount
未分配给item
(MEANS NULL),则上述查询不会返回任何行。
如何更改我的查询以处理null
?如果是null
,item.discountID
必须返回0?
答案 0 :(得分:2)
使用LEFT JOIN
代替INNER JOIN
:
SELECT item.`ID`, item.`Name`, item.`UnitCost`,
item.`Price`, IFNULL(discount.`rate`, 0)
FROM item
LEFT JOIN discount ON discount.`ID`=item.`DiscountID`
WHERE item.`Code`=itemCode;
即使连接表中没有匹配项,LEFT JOIN
也会返回第一个表中的所有行。
答案 1 :(得分:0)
问题是内部联接。如果遇到此问题,请尝试左连接或右连接
答案 2 :(得分:0)
使用LEFT JOIN执行此操作。
SELECT item.`ID`, item.`Name`, item.`UnitCost`, item.`Price`, discount.`rate`
FROM item LEFT JOIN discount ON item.`DiscountID`=discount.`ID`
WHERE item.`Code`=itemCode;
答案 3 :(得分:0)
使用 LEFT JOIN 代替INNER JOIN。当两个表中至少有一个匹配时,INNER JOIN只返回行
COALESCE()会将所有空值转换为0
试试这个
SELECT item.`ID`, item.`Name`, item.`UnitCost`,
item.`Price`, COALESCE(discount.`rate` , 0)
FROM item
LEFT JOIN discount ON discount.`ID`=item.`DiscountID`
WHERE item.`Code`=itemCode;