簡體   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