将两个更新查询合并到一个案例MySQL中

将两个更新查询合并到一个案例MySQL中,mysql,sql,database,syntax,Mysql,Sql,Database,Syntax,我正在尝试将这两个更新查询转换为一个案例查询: update product_varities pv set pv.quantity = pv.quantity + iquantity where pv.article_id = iarticleid AND pv.size_category_id = isize; update product_varities pv set pv.status = (case when pv.quantity > 0 then 1 else 0 end

我正在尝试将这两个更新查询转换为一个案例查询:

update product_varities pv
set pv.quantity = pv.quantity + iquantity
where pv.article_id = iarticleid
AND pv.size_category_id = isize;

update product_varities pv
set pv.status = (case when pv.quantity > 0 then 1 else 0 end)
WHERE pv.article_id = iarticleid and pv.size_category_id = isize;
这个查询工作正常。我尝试的是:

update product_varities pv set pv.quantity = 
(CASE WHEN pv.quantity >=0 THEN pv.quantity = pv.quantity + iquantity END),
pv.status = 
(CASE WHEN pv.quantity > 0 THEN  1 else 0 END)
     where pv.article_id = iarticleid and pv.size_category_id = isize;
这是回报

0 row(s) affected Rows Matched: 1 Changed 0 

有人能帮忙吗?谢谢

我想这就是你想要的:

update product_varities pv
set pv.quantity = pv.quantity + iquantity, 
    pv.status = case when pv.quantity > 0 then 1 else 0 end
where pv.article_id = iarticleid
    and pv.size_category_id = isize;
显然,mysql允许您将字段的值更新为表达式的结果。这似乎就是你正在做的


相反,这种方法是将字段的值更新为计算pv.quantity+iquantity。

您能解释一下我做错了什么吗,但正如在op中提到的,它不影响一行,只与该行匹配。@Harry-这就是您正在做的事情,出于某种疯狂的原因mysql允许它:-基本上是将值更新为表达式的结果,而不是将值更新为两个变量的相加。这是正确的方法:。它只是不更新任何内容您的查询正在将pv.quantity=pv.quantity+iquantity解析为将返回0或1的布尔语句。我认为应该更新,除非原始数量是碰巧匹配的0/1。再次感谢Gordon的明确解释@戈登林诺夫