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