我正在尝试更新表以删除除组的第一个实例之外的所有实例。基本上,我有一张表格,上面有与保险单有关的车辆数据。每个政策应该只有一个power_unit
。其他一切都应该是一个牵引单位。不幸的是,一个错误已经复制了动力装置,现在我需要清理它。数据库中有大约10k条记录,其中~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 | |
+------------+---------+------+-----+---------+----------------+
以及一些示例数据:
+----+-----------+------------+
| 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 |
+----+-----------+------------+
基本上我想结束policy_id
1只有一个power_unit=1
的地方。对于policy_id
2,3,4等也是如此。对于policy_id
6,什么都不应该改变(只有一个条目,并且它已经是power_unit)。
我不知道这是否可能,但对我来说这是一个有趣的问题,所以我认为你们可能会发现它是一样的。
更新
我不想DELETE
行UPDATE
只有power_unit=0
。{{1}}。
答案 0 :(得分:5)
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;