同名数据ID匹配问题:new_id列更新异常修正需求
问题描述
原始数据:
| Name | ID | new_id |
|---|---|---|
| John | 1 | null |
| John | 2 | null |
执行更新name='John'的new_id列后,得到错误结果:
| Name | ID | new_id |
|---|---|---|
| John | 1 | 2 |
| John | 2 | 2 |
期望实现每行new_id对应自身ID,结果如下:
| Name | ID | new_id |
|---|---|---|
| John | 1 | 1 |
| John | 2 | 2 |
解决方案
问题根源是你的更新语句缺少行级匹配条件,导致所有符合Name='John'的行被统一赋值为某个单一ID(比如查询结果的最后一条)。
如果需求是让new_id直接等于当前行的ID,执行以下SQL即可:
UPDATE your_table_name SET new_id = ID WHERE Name = 'John';
如果是需要关联其他表获取对应new_id,必须确保更新语句包含行级关联条件,避免批量赋值错误:
UPDATE your_table t JOIN target_table tt ON t.ID = tt.source_id SET t.new_id = tt.target_id WHERE t.Name = 'John';
核心逻辑是保证每一行都能匹配到唯一对应的目标值,避免无行级过滤的批量更新操作。
内容的提问来源于stack exchange,提问作者user12077330
相关产品推荐
相关产品推荐

