【问题标题】:Combine two update queries into single case MySQL将两个更新查询合并为单个案例 MySQL
【发布时间】:2015-01-07 22:18:01
【问题描述】:

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

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 

有人可以帮忙吗?谢谢

【问题讨论】:

  • 它只是没有更新任何东西
  • 您的查询将 pv.quantity = pv.quantity + iquantity 解析为布尔语句,将返回 0 或 1。我认为它应该更新,除非原始数量是偶然的匹配 0/1。
  • 再次感谢 Gordon 的明确解释!@GordonLinoff

标签: mysql sql database syntax


【解决方案1】:

我想这就是你要找的东西:

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

【讨论】:

  • 你能解释一下我做错了什么吗?
  • 查询确实执行了,但正如操作中提到的,它不影响一行,只匹配该行。
  • @Harry - 这就是你正在做的事情,出于某种疯狂的原因mysql 允许它:sqlfiddle.com/#!2/68386e/1 - 基本上你将值更新为表达式的结果而不是更新两个变量相加的值。这是正确的方法:sqlfiddle.com/#!2/54464/1.
猜你喜欢
  • 1970-01-01
  • 2018-05-29
  • 1970-01-01
  • 1970-01-01
  • 2021-10-01
  • 1970-01-01
  • 2015-01-31
相关资源
最近更新 更多