SELECT t.* FROM biz_technology_config t INNER JOIN ( SELECT conf_grp_num FROM biz_technology_config GROUP BY conf_grp_num HAVING COUNT(conf_grp_num) > 1 ) dup ON t.conf_grp_num = dup.conf_grp_num ORDER BY t.conf_grp_num;这是查出重复的,我想删除重复的,不留一条
时间: 2025-09-06 14:46:15 AIGC 浏览: 16
你已经成功查出了所有 `conf_grp_num` 重复的记录,现在你想**删除这些重复记录,并且**。
---
## ✅ 删除重复记录(不留一条)
你可以使用如下 SQL 语句来删除重复记录,只保留一条。
### ✅ 方法一:使用自连接 + 子查询(适用于 MySQL)
假设你的表有自增主键 `id` 字段:
```sql
DELETE t1
FROM biz_technology_config t1
INNER JOIN (
SELECT conf_grp_num, id
FROM (
SELECT
conf_grp_num,
id,
ROW_NUMBER() OVER (PARTITION BY conf_grp_num ORDER BY id) AS rn
FROM biz_technology_config
) dup
WHERE rn > 1
) t2 ON t1.id = t2.id;
```
---
### ✅ 方法二:使用 `ROW_NUMBER()`(适用于 MySQL 8.0+、PostgreSQL、SQL Server)
```sql
DELETE FROM biz_technology_config
WHERE id IN (
SELECT id FROM (
SELECT
id,
ROW_NUMBER() OVER (PARTITION BY conf_grp_num ORDER BY id) AS rn
FROM biz_technology_config
) t
WHERE rn > 1
);
```
---
### ✅ 方法三:使用自连接删除(适用于没有窗口函数的老版本 MySQL)
```sql
DELETE t1
FROM biz_technology_config t1
JOIN biz_technology_config t2
ON t1.conf_grp_num = t2.conf_grp_num
AND t1.id > t2.id;
```
这个语句会保留每组中 `id` 最小的那条记录,删除其余重复记录。
---
## ✅ 注意事项:
- **备份数据**:删除操作是不可逆的,建议删除前先用 `SELECT` 查看要删除的记录。
- **主键字段**:以上方法都依赖于表中存在一个唯一标识字段(如 `id`)。
- **性能影响**:如果表数据量大,建议在低峰期操作,并添加索引(如 `conf_grp_num` 上的索引)。
---
###
阅读全文
相关推荐













