oracle仅在第一次出现时更新

时间:2015-06-10 08:38:56

标签: database oracle

我有两列的表

rule_id , passenger_type 

PRIMARY KEY (rule_id , passenger_type)

我试图更新passenger_type =' CNN'哪里 passenger_type in(' C02',' C03',' C04')

但只是每个rule_id的第一次出现

我正在使用oracle db

例如:

+--------------------------+
| rule_id   passenger_type |
+--------------------------+
| 1         ADT            |
| 1         CH2            |
| 2         SWR            |
| 3         INF            |
| 1         CH3            |
| 2         CH4            |
| 2         CH3            |
| 3         ADT            |
+--------------------------+

结果预期:

+--------------------------+
| rule_id   passenger_type |
+--------------------------+
| 1         ADT            |
| 1         CNN            |
| 2         SWR            |
| 3         INF            |
| 1         CH3            |
| 2         CNN            |
| 2         CH3            |
| 3         ADT            |
+--------------------------+

1 个答案:

答案 0 :(得分:2)

没有适当的表序列,“第一次出现”的想法有点毛茸茸,但这会为每个rule_id更新一行

update dg_test d
set passenger_type  = 'CNN'
where (d.rule_id, d.passenger_type) in (select x.rule_id, min(x.passenger_type )
                                        from dg_test x
                                        where x.rule_id = d.rule_id
                                        group by x.rule_id)