如何用sql清理重复数据
时间: 2024-09-25 18:18:16 浏览: 41
sql2000数据库清除重复数据的二种方法
在SQL中清除重复数据通常可以使用`DISTINCT`, `UNION`, 或者 `GROUP BY` 和 `HAVING COUNT(*) > 1` 来完成。以下是几种常见的方法:
1. **使用DISTINCT**:
如果你想查找并删除表中的所有唯一值,可以在 `SELECT` 语句中使用 `DISTINCT` 关键字,然后将其结果插入到新的表中。
```sql
CREATE TABLE new_table AS SELECT DISTINCT * FROM original_table;
```
2. **使用UNION ALL (去除重复) - 如果只关心唯一的行:**
如果你的目标是去除两表中重复的行,可以用 `UNION ALL` 过滤出唯一的结果。
```sql
SELECT column1, column2 FROM table1
UNION ALL
SELECT column1, column2 FROM table2
WHERE NOT EXISTS (
SELECT 1 FROM (SELECT column1, column2 FROM table1) t1
INNER JOIN (SELECT column1, column2 FROM table2) t2 ON t1.column1 = t2.column1 AND t1.column2 = t2.column2
);
```
3. **使用GROUP BY + HAVING (去除重复组):**
如果你要保留每组唯一的记录,可以按一组特定字段分组,然后仅保留每个组的第一条记录。
```sql
DELETE FROM original_table
WHERE id NOT IN (
SELECT MIN(id)
FROM original_table
GROUP BY column1, column2
);
```
4. **使用子查询(针对复杂的条件):**
对于有复杂条件的情况,你可以创建一个子查询找出需要删除的重复行,然后再从原表中删除。
```sql
DELETE o1
FROM original_table o1
JOIN (
SELECT column1, column2, ROW_NUMBER() OVER(PARTITION BY column1, column2 ORDER BY id) as row_num
FROM original_table
) o2
ON o1.column1 = o2.column1 AND o1.column2 = o2.column2 AND o1.id < o2.row_num;
```
阅读全文