0

我有以下查询:

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?如果是nullitem.discountID必须返回 0?

4

4 回答 4

2

使用 aLEFT 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;

ALEFT JOIN返回第一个表中的所有行,即使连接表中没有匹配项。

于 2012-06-07T07:46:45.490 回答
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;
于 2012-06-07T08:16:25.000 回答
0

问题是内部连接。当您遇到此问题时,请尝试左加入或右加入 imstead

于 2012-06-07T07:47:42.560 回答
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; 
于 2012-06-07T07:48:53.053 回答