在单个查询中更新多个数据库记录(使用条件更新查询),具有相同的列值但ID不同

时间:2016-07-02 13:10:50

标签: mysql

我有这个问题,我现在正面临这个问题。我想在单个SQL查询中更新多个记录。我也在这篇文章中包含了我的表格的视觉效果。

这是我的表

+----------+------------+------------+
| item_ID  | meta_name  | meta_value |
+----------+------------+------------+
| VwhDB0zs | item_price | 25.00      |
| tPmg309L | item_price | 25.00      |
+----------+------------+------------+

这是我当前的SQL语句:

UPDATE pt_item_meta
SET meta_value = CASE meta_name
   WHEN 'item_price' THEN '251.00' 
   WHEN 'item_price' THEN '325.20'
ELSE meta_value END
WHERE item_ID IN('tPmg3O9L','VwhDBOzS')

我想更新具有相同值(item_price)的记录,这些记录是对各自ID的补充。

但问题是,此查询将导致meta_name = item_price的每条记录都更新为251.00。

我的目标是:

  1. 251.00应该是ID为tPmg309L
  2. 的项目的新item_price
  3. 325.20应为ID为VwhDB0zS
  4. 的项目的新item_price

    我没有实现我的目标。所以我得出结论,这个查询并不是针对这种特定情况的解决方案。

    有没有更好的解决方案?在此先感谢:)

2 个答案:

答案 0 :(得分:1)

将案例表达式从简单表单更改为搜索表单,并为item_ID添加条件:

UPDATE pt_item_meta
SET meta_value = 
 CASE 
   WHEN meta_name = 'item_price' AND item_ID = 'tPmg3O9L' THEN '251.00' 
   WHEN meta_name = 'item_price' AND item_ID = 'VwhDBOzS' THEN '325.20'
 END
WHERE item_ID IN('tPmg3O9L','VwhDBOzS')

或者你可以像这样重写它:

UPDATE pt_item_meta
SET meta_value = 
  CASE item_ID
   WHEN 'tPmg3O9L' THEN '251.00' 
   WHEN 'VwhDBOzS' THEN '325.20'
  END
WHERE item_ID IN ('tPmg3O9L','VwhDBOzS') 
  AND meta_name = 'item_price'

在这两种情况下,最重要的是检查两个条件(item_ID和meta_name)。此外,不需要else分支,因为用于过滤的谓词可确保不会更新除预期之外的其他行。

答案 1 :(得分:0)

UPDATE pt_item_meta
SET meta_value = CASE 
   WHEN item_ID='tPmg3O9L'THEN '251.00' 
   WHEN item_ID= 'VwhDBOzS' THEN '325.20' END 
WHERE item_ID IN('tPmg3O9L','VwhDBOzS');

试试这个