如何编写SQL语句按条件更新column1、column2或column3对应字段
条件更新多字段的正确SQL实现
你原先的写法错误点在于CASE表达式不能直接放在SET后控制整行赋值逻辑,SQL的SET语法要求指定具体要更新的字段名,再对应赋值表达式。正确写法是给每个待更新字段单独编写CASE判断,不满足更新条件时保留字段原有值即可。
支持UPDATE FROM语法的数据库(PostgreSQL、SQL Server等)写法
UPDATE p SET your_qty = CASE WHEN inv.name = 'your' THEN inv.qty ELSE p.your_qty END, other_qty = CASE WHEN inv.name = 'other' THEN inv.qty ELSE p.other_qty END, my_qty = CASE WHEN inv.name = 'my' THEN inv.qty ELSE p.my_qty END FROM products p JOIN Qty_products_inv inv ON p.itemNo = inv.itemNo;
MySQL 写法
MySQL不支持UPDATE ... FROM的语法,需要调整关联写法:
UPDATE products p JOIN Qty_products_inv inv ON p.itemNo = inv.itemNo SET your_qty = CASE WHEN inv.name = 'your' THEN inv.qty ELSE p.your_qty END, other_qty = CASE WHEN inv.name = 'other' THEN inv.qty ELSE p.other_qty END, my_qty = CASE WHEN inv.name = 'my' THEN inv.qty ELSE p.my_qty END;
注意事项
必须保留CASE中的ELSE分支,否则不满足更新条件的字段会被赋值为NULL,导致原有数据丢失。
内容的提问来源于stack exchange,提问作者Zen
相关产品推荐
相关产品推荐

