代码之家  ›  专栏  ›  技术社区  ›  Jack M.

只更新一个结果?

  •  4
  • Jack M.  · 技术社区  · 14 年前

    我正在尝试更新一个表以删除组的第一个实例以外的所有实例。基本上,我有一个与保险单相关的车辆数据表。每个策略应该只有一个 power_unit . 其他的都应该是拖拽的。不幸的是,一个bug一直在复制电源设备,现在我需要清理一下。数据库中有~10000条记录,其中~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 . 同样 保险单 2、3、4等 保险单 6,什么都不应该改变(只有一个条目,它已经是一个电源单元了)。

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

    更新:
    我不想 DELETE 行,只是 UPDATE 他们有 power_unit=0 .

    1 回复  |  直到 14 年前
        1
  •  5
  •   Quassnoi    14 年前
    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;