我试图将项目数量设置为0,如果它在" item_to_inv"
中为空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
答案 0 :(得分:1)
case语句没有任何问题,问题是对于id 5,8和10,你试图总结没有返回NULL的值(参见manual)。
您可以通过将查询更改为:
,使查询返回0SELECT 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`
答案 1 :(得分:0)
使用此查询
update Your_Table_name set quantity=0 where item_to_inv IS NULL ;
答案 2 :(得分:0)
这里的问题是你的子查询没有返回记录,所以&#39;当&#39;条款没有发挥作用 - 没有匹配的记录。
重构您的查询以使用外部联接返回记录,即使没有匹配
请参阅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`
答案 3 :(得分:0)
有时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`