mysql通过MIN(id)实现删除重复数据保留一条

使用 `MIN(id)` 实现删除重复数据并只保留一条记录的思路是首先找出每组重复记录中的最小 `id`,然后删除所有其他记录。以下是具体的步骤:

假设有一个名为 `my_table` 的表,结构如下:

```sql

CREATE TABLE my_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    value INT
);


```

### 删除重复数据的步骤:

1. **找出要保留的记录**:使用 `MIN(id)` 找出每组重复记录中的最小 `id`。
2. **删除其他记录**:使用 `DELETE` 语句删除那些不在保留记录中的其他记录。

下面是一种实现办法:

```sql

DELETE FROM my_table
WHERE id NOT IN (
    SELECT * FROM (
        SELECT MIN(id) 
        FROM my_table 
        GROUP BY name, value
    ) AS temp
);


```

### 解释步骤:

1. **子查询**:
   - `SELECT MIN(id) FROM my_table GROUP BY name, value`:这段 SQL 语句选择了每组(以 `name` 和 `value` 为基准)重复记录中的最小 `id`,将其作为要保留的记录。

2. **外层删除**:
   - `DELETE FROM my_table WHERE id NOT IN (...)`:删除那些 `id` 不在最小 `id` 列表中的记录。

### 注意事项:

- **临时表的使用**:在某些版本的 MySQL 中,不能直接在同一查询中进行删除和选择,因此使用 `AS temp` 来包裹子查询可以解决这个问题。
- **备份数据**:在执行删除操作之前,确保备份你的数据,避免误删。
- **测试查询**:先运行查询语句,确认将要删除的记录,例如将 `DELETE` 替换为 `SELECT *`,以查看哪些数据将被删除。

使用这种方法,你能有效地去掉重复数据,只保留每组的最小 `id` 对应的记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值