更新所有结果?

时间:2010-05-20 18:18:24

标签: mysql sql-update

我正在尝试更新表以删除除组的第一个实例之外的所有实例。基本上,我有一张表格,上面有与保险单有关的车辆数据。每个政策应该只有一个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)。

我不知道这是否可能,但对我来说这是一个有趣的问题,所以我认为你们可能会发现它是一样的。

更新
我不想DELETEUPDATE只有power_unit=0。{{1}}。

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;