需求:需要通过主键id更新某些字段,但是暂时不知道这些id,所以先要通过查询到这些所有的id。
我的查询主键的sql:
select id from a where age > 20;
结果:
然后我们要去根据这些id,更新。
但是这些如果一个一个复制的话,太麻烦,而且容易出错。所以需要把这些多条id合并为一条,放在一个框里面,直接去复制使用。
解决方案sql:
select GROUP_CONCAT(id) from a where age > 20;
结果:
我们就可以直接复制使用了。
但是为了更安全——-
我们可以用一句更新sql去联合查id的sql,如下:
update
table1 a1
inner join (
select
distinct id
from
table1
where
age > 20
and ...
) b1 on a1.id = b1.id
set
a1.待更新字段 = '新数据',
...
where
1 = 1;
虽然安全,但是这种如果id数据量很大,可能会造成cpu的压力。