优化更新查询代码需求:实时重命名重复媒体标题
实时重命名重复媒体标题的SQL实现
需求说明
用户点击添加新标题按钮时,需要实时对media_title表中重复的原有标题进行重命名(格式示例:Title A-2、Title A-3),避免在批量添加影片后再做批量更新。
原代码问题说明
你提供的SQL代码存在一处逻辑错误:子查询u2中GROUP BY的字段是name,但SELECT的是local_title,这会导致分组逻辑失效,无法正确识别重复的local_title。
修正后的SQL代码
UPDATE media_title u1 JOIN ( SELECT u1.id, CONCAT(u1.local_title, '-', ROW_NUMBER() OVER(PARTITION BY u1.local_title ORDER BY u1.id) + 1) AS newname FROM media_title u1 JOIN ( SELECT local_title FROM media_title GROUP BY local_title HAVING COUNT(*) > 1 ) u2 ON u1.local_title = u2.local_title ) u3 ON u1.id = u3.id SET u1.local_title = u3.newname
代码说明
- 子查询
u2:筛选出存在重复记录的local_title - 子查询
u3:通过ROW_NUMBER()窗口函数,对每个重复的local_title按id排序,生成递增的序号并拼接成新标题 - 关联主表
u1与子查询u3,将重复标题更新为带序号的新名称
预期执行效果
执行后media_title表的记录如下:
| ID | Local title |
|---|---|
| 1 | Title A |
| 2 | Title A-2 |
| 3 | Title A-3 |
| 4 | Title A-4 |
| 5 | Title B |
| 6 | Title C |
| 7 | Title C-2 |
内容的提问来源于stack exchange,提问作者ingmar leifsson
相关产品推荐
相关产品推荐

