我正在尝试更新表以删除除组的第一个实例之外的所有实例.基本上,我有一张表格,上面有与保险单有关的车辆数据.每个政策应该只有一个power_unit
.其他一切都应该是一个牵引单位.不幸的是,一个错误已经复制了动力装置,现在我需要清理它.数据库中有大约1万条记录,其中约4k条的功率单位增加了一倍.
我表中的重要部分(现在称之为test1)是:
+------------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------+------+-----+---------+----------------+
| id | int(10) | NO | PRI | NULL | auto_increment |
| policy_id | int(10) | NO | | NULL | |
| power_unit | int(1) | NO | | 0 | |
+------------+---------+------+-----+---------+----------------+
Run Code Online (Sandbox Code Playgroud)
还有一些样本数据:
+----+-----------+------------+
| id | policy_id | power_unit |
+----+-----------+------------+
| 1 | 1 | 1 |
| 2 | 1 | 1 |
| 3 | 1 | 1 |
| 4 | 2 | 1 |
| 5 | 2 | 1 |
| 6 | 2 | 1 |
| 7 | 4 | 1 |
| 8 | 4 | 1 |
| 9 | 4 | 1 |
| 10 | 5 | 1 |
| 11 | 5 | 1 |
| 12 | 6 | 1 |
+----+-----------+------------+
Run Code Online (Sandbox Code Playgroud)
基本上我想结束policy_id
1只有一个power_unit=1
.相同的policy_id
2,3,4等.对于policy_id
6,什么都不应该改变(只有一个条目,它已经是power_unit).
我不知道这是否可能,但对我来说这是一个有趣的问题,所以我认为你们可能会发现它是一样的.
更新:
我不想要DELETE
行,只需要UPDATE
它们power_unit=0
.
UPDATE test1 t1,
(
SELECT policy, MIN(ti.id) AS mid
FROM test1 ti
GROUP BY
policy
) tm
SET power_unit = 0
WHERE t1.policy = tm.policy
AND t1.id <> tm.mid;
Run Code Online (Sandbox Code Playgroud)