[英]CASE WHEN NULL in MySQL
我正在尝试将“ item_to_inv”中的商品数量设置为0(如果为NULL)
SELECT i.`id`
, (SELECT SUM(CASE WHEN (`quantity` < 0 OR `quantity` IS NULL) THEN 0 ELSE `quantity` END) AS `quantity` FROM `item_to_inv` WHERE `item_id` = i.`id` GROUP BY `item_id`) AS `quantity`
FROM `item` AS `i`
以下项目ID: 5、8和10在item_to_inv中没有记录
遵循CASE WHEN语句有什么问题?
CASE WHEN (`quantity` < 0 OR `quantity` IS NULL) THEN 0
case语句没有任何问题,问题在于,对于ID 5、8和10,您试图不求和将返回NULL的值(请参阅手册 )。
您可以通过将查询更改为以下内容,使查询针对这些ID返回0:
SELECT i.`id`
, (SELECT IFNULL(SUM(CASE WHEN (`quantity` < 0 OR `quantity` IS NULL) THEN 0 ELSE `quantity` END), 0) AS `quantity` FROM `item_to_inv` WHERE `item_id` = i.`id` GROUP BY `item_id`) AS `quantity`
FROM `item` AS `i`
使用此查询
update Your_Table_name set quantity=0 where item_to_inv IS NULL ;
这里的问题是您的子查询不返回任何记录,因此'when'子句不起作用-没有匹配的记录。
重组查询以使用外部联接返回记录,即使没有匹配项
参见http://sqlfiddle.com/#!9/e37faf/4
SELECT i.`id`, SUM(IFNULL(ii.`quantity`, 0))
FROM `item` AS `i`
LEFT OUTER JOIN `item_to_inv` AS ii ON ii.`item_id` = i.`id`
GROUP BY i.`id`
有时MySQL无法将null理解为空白,这就是IS NULL无法正常工作的原因。 尝试将查询更改为此
SELECT i.`id`, (SELECT SUM(CASE WHEN (`quantity` < 0 OR `quantity`='') THEN 0
ELSE `quantity` END) AS `quantity` FROM `item_to_inv` WHERE `item_id` = i.`id`
GROUP BY `item_id`) AS `quantity` FROM `item` AS `i`
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.