如何用不同值批量更新多行数据?MySQL语法及Node.js实现疑问
批量更新不同行的不同字段值方案
你不需要在Node.js里循环逐行执行更新,单条SQL就能搞定。你原来的SQL报错是因为names = ('name1', 'name2')的写法逻辑错误——数据库没法把数组里的两个值对应到id=1和id=2的两行上。
下面是两种可行的正确写法:
通用兼容写法(适用于MySQL、PostgreSQL、SQL Server等多数数据库)
用CASE WHEN语句匹配id和对应的新值:
UPDATE UsersTable SET `names` = CASE WHEN id = 1 THEN 'name1' WHEN id = 2 THEN 'name2' END WHERE id IN (1, 2);
这个语句会仅更新id为1和2的行,根据id匹配对应的names值,不会影响其他数据。
MySQL专属高效写法(适合批量更新大量行)
通过构造临时数据集关联原表更新:
UPDATE UsersTable u JOIN ( SELECT 1 AS id, 'name1' AS new_name UNION ALL SELECT 2 AS id, 'name2' AS new_name ) t ON u.id = t.id SET u.`names` = t.new_name;
这种方式在需要更新几十上百行时,比CASE WHEN更易维护,直接在临时数据集里添加新的id和对应值即可。
内容的提问来源于stack exchange,提问作者Muaviya
相关产品推荐
相关产品推荐

