我有这个问题,我现在正面临这个问题。我想在单个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。
我的目标是:
我没有实现我的目标。所以我得出结论,这个查询并不是针对这种特定情况的解决方案。
有没有更好的解决方案?在此先感谢:)
答案 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');
试试这个