繁体   English   中英

在MySQL中为NULL的情况

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM