Microsoft SQL Server如何删除关联Car表的Vehicle表重复记录
Microsoft SQL Server 删除Vehicle表重复记录SQL语句
实现思路
通过窗口函数对满足重复规则的记录分组排序,仅保留每组中VehicleId最小的一条,删除其余重复项。
完整SQL代码
-- 先执行SELECT语句预览要删除的记录,确认无误后再执行DELETE -- SELECT * DELETE v FROM ( SELECT *, ROW_NUMBER() OVER ( PARTITION BY v.CarId, v.CounterLimit, v.Kilometers ORDER BY v.VehicleId ASC ) AS rn FROM Vehicle v INNER JOIN Car c ON v.CarId = c.CarId ) v WHERE v.rn > 1;
逻辑说明
- 首先通过
INNER JOIN Car关联两张表,只处理Vehicle.CarId在Car表中存在的记录,满足重复判定前提 PARTITION BY后的三个字段为重复判定的组合维度,相同值的记录会被划分到同一分组- 同一分组内按
VehicleId升序排序,VehicleId最小的记录行号为1,作为保留项 - 最终删除行号大于1的所有记录,就是需要清理的重复数据,示例中会精准删除
VehicleId = 3的记录
注意事项
执行删除操作前,建议先把代码中的DELETE v替换为SELECT *执行,确认输出的待删除记录符合预期后再执行删除操作,避免误删数据。
内容的提问来源于stack exchange,提问作者John Smith
相关产品推荐
相关产品推荐

