sqlserver删除重复数据

文章介绍了在SQLServer中,当使用Navicat迁移数据库时不小心导入了重复数据,如何利用ROW_NUMBER()函数和CTE(公共表表达式)来快速删除多余数据的方法。只需替换字段并执行相关语句即可。

sqlserver删除重复数据

迁移数据库的时候使用了Navicat传输,却不小心传入了两遍相同的数据,如何删掉多余的数据,用到下面的这个语句,非常简单,只需要替换对应的字段即可。

WITH CTE AS (
    SELECT UnitId,
           Unit,
           ROW_NUMBER() OVER (PARTITION BY Unit  ORDER BY UnitId) AS row_num
    FROM Maintain_Unit
)
DELETE FROM CTE WHERE row_num > 1;
SQL Server 中删除重复数据通常通过聚集函数、自连接查询或使用内置的 `DISTINCT` 关键字结合 `DELETE` 或 `INSERT INTO ... SELECT DISTINCT` 来实现。以下是几种常见的方法: 1. **使用 `DISTINCT`**: 如果你想删除某个表中的所有重复行,可以先创建一个新的临时表,只包含唯一的数据,然后将这些行插入到原始表中。 ```sql INSERT INTO TableName DistinctColumn1, DistinctColumn2... SELECT DISTINCT Column1, Column2... FROM TableName; ``` 2. **使用 `DELETE` 和 `GROUP BY`**: 首先,找出重复的行,然后根据需要的唯一标识符删除非第一个出现的行。 ```sql DELETE T1 FROM TableName T1 INNER JOIN ( SELECT Column1, Column2, ROW_NUMBER() OVER(PARTITION BY Column1, Column2 ORDER BY (SELECT NULL)) AS RN FROM TableName ) T2 ON T1.Column1 = T2.Column1 AND T1.Column2 = T2.Column2 WHERE T2.RN > 1; ``` 3. **使用 `CTE`(公共表表达式)**: 可以通过递归的方式从原始表开始,逐步删除重复项。 ```sql WITH CTE recursive (ID, DupRows) AS ( SELECT ID, COUNT(*) OVER(PARTITION BY Column1, Column2) as DupRows FROM TableName UNION ALL SELECT t.ID, c.DupRows - 1 FROM TableName t JOIN CTE c ON t.Column1 = c.Column1 AND t.Column2 = c.Column2 WHERE c.DupRows > 1 ) DELETE FROM TableName WHERE ID IN (SELECT ID FROM CTE WHERE DupRows > 1); ``` 请注意,执行此类操作前务必备份数据,以防误删重要信息。同时,不同的场景可能需要调整上述示例以适应你的实际需求。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值