Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL update语句中使用CASE根据CASE条件更新不同的列_Mysql - Fatal编程技术网

在MySQL update语句中使用CASE根据CASE条件更新不同的列

在MySQL update语句中使用CASE根据CASE条件更新不同的列,mysql,Mysql,我试图根据某些条件更新数据库中的2列。我有bid\u limit列,当bid\u limit>0时,我需要将addon\u limit列更新为addon\u limit-1 我尝试了以下查询,但对我无效 update tbl_user set (case when (bid_limit>0) then (bid_limit=bid_limit-1) else (addon_limit=addon_limit-1) end) where id='157' 提前感谢您可以在列上使用CASE时

我试图根据某些条件更新数据库中的2列。我有
bid\u limit
列,当
bid\u limit>0
时,我需要将
addon\u limit
列更新为
addon\u limit-1

我尝试了以下查询,但对我无效

update tbl_user set (case when (bid_limit>0) then (bid_limit=bid_limit-1) else (addon_limit=addon_limit-1) end) where id='157'

提前感谢

您可以在列上使用CASE时使用以下更新语句:

UPDATE tbl_user 
  SET addon_limit = CASE WHEN bid_limit <= 0 THEN addon_limit - 1 ELSE addon_limit END,
      bid_limit = CASE WHEN bid_limit > 0 THEN bid_limit - 1 ELSE bid_limit END
WHERE id = '157'
更新tbl\u用户
设置加载项限制=当投标限制为0时,则投标限制为-1,否则投标限制结束
其中id='157'
确保在
出价限制之前设置
附加限制

单个表
UPDATE
分配通常从左到右进行评估。对于多个表更新,不能保证按任何特定顺序执行分配

如果将列设置为当前的值,MySQL会注意到这一点,并且不会对其进行更新。 来源:


案例
在这种情况下是错误的选择。因为它代表定义多个条件。当您只有一个条件时,您应该使用
IF
。这样:

更新tbl\u用户
设置
附加限制=如果(投标限制>0,附加限制,附加限制-1),
投标限额=如果(投标限额>0,投标限额-1,投标限额)