sqlserver 删除重复数据
时间: 2024-08-15 15:03:08 浏览: 92
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);
```
请注意,执行此类操作前务必备份数据,以防误删重要信息。同时,不同的场景可能需要调整上述示例以适应你的实际需求。
阅读全文