如何用单条SQL语句批量更新多组code和id对应的flag字段
单条SQL实现多组合条件的批量更新
可以通过行值构造器结合IN子句实现单条SQL完成批量更新,这是标准SQL写法,PostgreSQL、Oracle、MySQL 8.0+等多数现代数据库都支持:
UPDATE my_table SET flag = 1 WHERE (code, id) IN ( ('ABC', 10000), ('DEF', 10001), ('GHI', 10002), ('ABC', 10001) );
如果你的数据库版本不支持行值构造器(比如MySQL 5.x),可以用多个OR连接条件(注意给每个组合加括号,避免逻辑混乱):
UPDATE my_table SET flag = 1 WHERE (code = 'ABC' AND id = 10000) OR (code = 'DEF' AND id = 10001) OR (code = 'GHI' AND id = 10002) OR (code = 'ABC' AND id = 10001);
要是需要更新的组合数量极多,还可以先把这些组合存入临时表,再通过关联更新实现:
-- 创建临时表并插入待更新的组合数据 CREATE TEMP TABLE temp_updates (code VARCHAR(10), id INT); INSERT INTO temp_updates VALUES ('ABC', 10000), ('DEF', 10001), ('GHI', 10002), ('ABC', 10001); -- 关联原表完成更新 UPDATE my_table t JOIN temp_updates tu ON t.code = tu.code AND t.id = tu.id SET t.flag = 1;
注意:把示例中的my_table替换成你实际的数据表名,别用table这种SQL关键字当表名,会触发语法错误。
内容的提问来源于stack exchange,提问作者Mohamed abdul
相关产品推荐
相关产品推荐

