SQL如何在指定PK的Field2存在a2时批量更新该PK所有行的Field3值
需求实现SQL方案
现有表结构及示例数据
| PK | Field2 | Field3 |
|---|---|---|
| 11111 | a1 | 0 00:05 |
| 11111 | a2 | 0 00:05 |
| 22222 | a1 | 0 00:05 |
通用SQL写法(兼容PostgreSQL、Oracle、SQL Server等主流数据库)
通过EXISTS做存在性校验,仅当PK=11111的分组下存在Field2='a2'的记录时,才会执行更新操作,不会影响其他PK的行数据:
UPDATE 你的表名 SET Field3 = '0 00:10' WHERE PK = '11111' AND EXISTS ( SELECT 1 FROM 你的表名 t2 WHERE t2.PK = '11111' AND t2.Field2 = 'a2' );
MySQL适配写法
部分MySQL版本不支持UPDATE语句中直接对同表做子查询,可改用关联更新的逻辑实现同等效果:
UPDATE 你的表名 t1 INNER JOIN ( SELECT DISTINCT PK FROM 你的表名 WHERE PK = '11111' AND Field2 = 'a2' ) t2 ON t1.PK = t2.PK SET t1.Field3 = '0 00:10';
内容的提问来源于stack exchange,提问作者Al Sol
相关产品推荐
相关产品推荐

