【问题标题】:Hierarchical multiple update query on one table - oracle一张表上的分层多重更新查询 - oracle
【发布时间】:2018-05-14 19:28:41
【问题描述】:

我有一个表person,这些列相互依赖。

person_id, related_person_id, beginner_related_person_id 

我的数据示例

person_id related_person_id beginner_related_person_id 
1         null              null
2         1                 null
3         2                 null
4         null              null
5         4                 null 
6         null              null

此列beginner_related_person_id 是新列,目前为空。

我必须使用 person_id 中的值更新此行,但要使用根 person_id。

person_id related_person_id beginner_related_person_id
1         null              null
2         1                 1
3         2                 1
4         null              null
5         4                 4 
6         null              null

我已开始编写查询,但需要提示。

update person
set beginner_related_person_id = person_id
where person_id in (select  distinct person_id from person start with  related_person_id in (select person_id from person)
  connect by prior beginner_person_id = person_id);

我应该使用循环吗?还是别的什么?

【问题讨论】:

  • person_id 是您表中的唯一键吗?
  • 是的,它是一个主键。

标签: oracle hierarchical-query


【解决方案1】:

您可以使用MERGE 语句轻松完成此操作。

merge into person using (
select person_id, 
       related_person_id, 
       nullif(connect_by_root person_id, person_id) new_beginner_related_id
from   person
start with 
   related_person_id is null
connect by  
   related_person_id = prior person_id ) u
on ( t.person_id = u.person_id )
when matched then 
  update set 
     t.beginner_related_person_id = u.new_beginner_related_id;

【讨论】:

  • 谢谢,我会这样尝试的。
猜你喜欢
  • 2013-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-27
  • 1970-01-01
相关资源
最近更新 更多