更新中的MySQL复杂CASE语句

更新中的MySQL复杂CASE语句,mysql,sql,Mysql,Sql,我想去掉负值和零。我以这个问题为基础,试图撰写我的请求 我的问题是: UPDATE cart SET cart_count = CASE WHEN cart_count >= 2 THEN cart_count = cart_count - 1 ELSE cart_count = 1 END WHERE cart_id = 20 AND cart_ip = '127.0.0.1'; SELECT * FROM cart WHERE cart_id = 20 AND cart_ip

我想去掉负值和零。我以这个问题为基础,试图撰写我的请求

我的问题是:

UPDATE cart
SET cart_count = CASE
 WHEN cart_count >= 2 THEN cart_count = cart_count - 1
 ELSE cart_count = 1
 END
WHERE cart_id = 20 AND cart_ip = '127.0.0.1';

SELECT *
FROM cart
WHERE cart_id = 20 AND cart_ip = '127.0.0.1'
不幸的是,我甚至不知道这个请求是否正确。我没有看到任何错误消息,表中也没有发生任何更改

我想不使用存储过程编写查询
感谢您的回答

您的回答几乎正确,只有在必须返回值且无法设置的情况下才正确


Dfiddle

案例表达叹息。[这可能看起来很傲慢,但这是你误解的核心]超级,当它有帮助时,请看现在更改的示例ELSE cart\u count=1应该是ELSE1@AntonínLejsek事实上,这对这种情况并不重要,我对它进行了更改,这样就不会有人混淆创建表cart`cart\u id INT11 NOT NULL AUTO\u INCREMENT,购物车id产品INT11不为空,购物车价格小数12,2不为空默认值“0.00”,购物车计数INT11不为空默认值“1”,购物车datetime日期时间不为空,购物车ip VARCHAR100不为空COLLATE“utf8”general\u ci,主键购物车id使用BTREE COLLATE='utf8\u general\u ci'ENGINE=InnoDB AUTO\u INCREMENT=6`
CREATE TABLE `cart` ( cart_id INT(11) NOT NULL AUTO_INCREMENT
, cart_id_product INT(11) NOT NULL
, cart_price DECIMAL(12,2) NOT NULL DEFAULT '0.00'
, cart_count INT(11) NOT NULL DEFAULT '1'
, cart_datetime DATETIME NOT NULL
, cart_ip VARCHAR(100) NOT NULL COLLATE 'utf8_general_ci'
, PRIMARY KEY (cart_id) USING BTREE ) COLLATE='utf8_general_ci' ENGINE=InnoDB AUTO_INCREMENT=6 ;
INSERt INTO cart VALUEs(20,1,12.1, 3,NOW(),'127.0.0.1')
UPDATE cart
SET cart_count = CASE
 WHEN cart_count >= 2 THEN cart_count  - 1
 ELSE 1
 END
WHERE cart_id = 20 AND cart_ip = '127.0.0.1';
SELECT * from cart
cart_id | cart_id_product | cart_price | cart_count | cart_datetime | cart_ip ------: | --------------: | ---------: | ---------: | :------------------ | :-------- 20 | 1 | 12.10 | 2 | 2020-07-18 21:12:20 | 127.0.0.1
UPDATE cart
SET cart_count = CASE
 WHEN cart_count >= 2 THEN cart_count  - 1
 ELSE 1
 END
WHERE cart_id = 20 AND cart_ip = '127.0.0.1';
SELECT * from cart
cart_id | cart_id_product | cart_price | cart_count | cart_datetime | cart_ip ------: | --------------: | ---------: | ---------: | :------------------ | :-------- 20 | 1 | 12.10 | 1 | 2020-07-18 21:12:20 | 127.0.0.1
UPDATE cart
SET cart_count = CASE
 WHEN cart_count >= 2 THEN cart_count  - 1
 ELSE 1
 END
WHERE cart_id = 20 AND cart_ip = '127.0.0.1';
SELECT * from cart
cart_id | cart_id_product | cart_price | cart_count | cart_datetime | cart_ip ------: | --------------: | ---------: | ---------: | :------------------ | :-------- 20 | 1 | 12.10 | 1 | 2020-07-18 21:12:20 | 127.0.0.1