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が(MEANS NULL)に割り当てられていない場合item、上記のクエリは行を返しません。

クエリを変更して処理するにはどうすればよいnullですか?の場合、null0item.discountIDを返す必要がありますか?

4

4 に答える 4

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;

ALEFT JOINは、結合されたテーブルに一致するものがない場合でも、最初のテーブルからすべての行を返します。

于 2012-06-07T07:46:45.490 に答える
0

問題は内部結合です。この問題が発生した場合は、代わりに左結合または右結合を試してください

于 2012-06-07T07:47:42.560 に答える
0

LEFTJOINでそれを行います。

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 に答える
0

INNERJOINの代わりにLEFTJOINを使用します。INNER JOINは、両方のテーブルに少なくとも1つの一致がある場合に、行を返すだけです。

COALESCE()は、すべてのnull値を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 に答える