在JOIN中处理NULL

时间:2012-06-07 07:45:05

标签: mysql sql database

我有以下查询:

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 个答案:

答案 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;