Oracle SQL:在其他行中更新具有相同列值的列,其他列上具有条件

时间:2014-05-22 12:27:19

标签: oracle sql-update inner-join

我想从另一列中具有相同值的行更新具有相同列值的列(如果为NULL)(假设此行存在且它是唯一的)。在下面的示例中,Order_ID = 2具有NULL Group_ID。查询应插入(唯一)行的Group_ID,该行在Quantity列中具有相同的值。 (这是一个简化的例子。真正的表有30列和900'000行)。

Order_ID  Price  Quantity  Group_ID
1         10     15        345
2         21     15        NULL

所以预期的输出是:

Order_ID  Price  Quantity  Group_ID
1         10     15        345
2         21     15        345

我尝试了这个查询,但它显然卡住了,我必须停止它(下班后):

update My_Table t1
set Group_ID=(select t2.Group_ID 
from My_Table t1 inner join My_Table t2
on
t1.Quantity = t2.Quantity
where t1.Group_ID is not NULL and t2.Group_ID is NULL)

1 个答案:

答案 0 :(得分:0)

这会将group_id设置为第一个记录中与所选数量相同的group_id值。

update table t1
set group_id = (select group_id from table t2
                where t1.quantity=t2.quantity
                and t2.group_id is not null
                and rownum=1)
where group_id is null