在MySQL中为空时的情况

时间:2018-03-26 12:08:31

标签: mysql

我试图将项目数量设置为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

enter image description here

4 个答案:

答案 0 :(得分:1)

case语句没有任何问题,问题是对于id 5,8和10,你试图总结没有返回NULL的值(参见manual)。

您可以通过将查询更改为:

,使查询返回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`

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