如何更新id相同但行数据不同的表中指定行的指定列数据
假设我有一张表 t1,包含如下数据,其中id值固定不变:
| ID | Name | Application_id | Location |
|---|---|---|---|
| 1 | UAT | 123 | USA |
| 1 | TEST | 222 | UK |
我现在仅需要更新第一行的name列值,预期输出如下所示:
| ID | Name | Application_id | Location |
|---|---|---|---|
| 1 | DEV | 123 | USA |
| 1 | TEST | 222 | UK |
解决方案
由于两行ID值完全重复,无法仅通过ID定位目标行,你可以使用可区分的业务字段组合作为筛选条件,通用SQL语句如下:
UPDATE t1 SET Name = 'DEV' WHERE Application_id = 123 AND Location = 'USA';
如果你使用的数据库支持窗口函数(如MySQL 8.0+、PostgreSQL、Oracle、SQL Server等),也可以通过行号直接定位第一行:
-- 以MySQL为例 UPDATE t1 INNER JOIN ( SELECT *, ROW_NUMBER() OVER (ORDER BY Application_id ASC) AS row_num FROM t1 ) AS t_rank ON t1.Application_id = t_rank.Application_id AND t1.Location = t_rank.Location SET t1.Name = 'DEV' WHERE t_rank.row_num = 1;
建议优先使用业务字段作为筛选条件,避免行号排序逻辑变动导致误更新。
内容的提问来源于stack exchange,提问作者Aanchal shrivastava
相关产品推荐
相关产品推荐

