DBにNULLが入ってる時にIFNULLを! 
2009/3/2 月曜日 18:52:58
DBの設計上、NULLが入っている場合の集計の際にちょっとハマりました。
下記のような注文テーブル(orders)があったとします。
DESC orders; +-----------+---------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+---------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | total | int(11) | YES | | NULL | | | sub_total | int(11) | YES | | NULL | | +-----------+---------+------+-----+---------+----------------+ SELECT * FROM orders; +----+-------+-----------+ | id | total | sub_total | +----+-------+-----------+ | 1 | 1050 | 500 | | 2 | 1575 | NULL | +----+-------+-----------+
各注文のtotalからsub_totalを差し引いた金額(エイリアスをcostとする)を取得したい時、
SELECT (total - sub_total) AS cost FROM orders;
このようにすると、NULLの場合は0として計算してくれるだろうと思っていたら甘かったです。
id: 1のcostは550、id: 2のcostはNULLとなります。
SELECT (IFNULL(total,0) - IFNULL(sub_total,0)) AS cost FROM orders;
NULLが入っている可能性がある場合は、このようにIFNULLを使ってやればNULLならば0として計算してくれます。
IFNULL(expr1,expr2)
expr1がNULLでない場合はexpr1を返し、それ以外の場合はexpr2を返します。