使用Oracle sql基于父值更新子行

使用Oracle sql基于父值更新子行,sql,oracle,parent-child,hierarchy,Sql,Oracle,Parent Child,Hierarchy,我在Oracle中有两个表,其结构类似于: 家庭表 飞行台 这里,族表中id为4,5的行是第3行的子行,第2行是第1行的子行 现在,我需要编写一个oracle更新sql,不仅用flight更新相应的父行,并将标志更改为Y,而且子行也应该相应地更新。如果航班表中的族没有相应的航班分配,则第6、7行应保持不变 执行父级更新和查找父级的子级很容易。但是有可能在一个sql中完成所有更新吗 谢谢 更新 这个有用 可以。在oracle中,递归选择很容易。以下是我的建议: Update family set

我在Oracle中有两个表,其结构类似于:

家庭表

飞行台

这里,族表中id为4,5的行是第3行的子行,第2行是第1行的子行

现在,我需要编写一个oracle更新sql,不仅用flight更新相应的父行,并将标志更改为Y,而且子行也应该相应地更新。如果航班表中的族没有相应的航班分配,则第6、7行应保持不变

执行父级更新和查找父级的子级很容易。但是有可能在一个sql中完成所有更新吗

谢谢

更新


这个有用

可以。在oracle中,递归选择很容易。以下是我的建议:

Update family set flag='Y' 
    where id in(select id from family start with id=3 
                     connect by prior id=parent_id)

在这里发布简单的部分。你不能用一个update语句更新多个表。我不打算更新多个表。只有族表需要更新,但更新必须与父行一起级联到子行。如何修改此sql以执行级联:更新族fm SET fm.flight,flag=选择fl.flight,Y来自fl航班,其中fl.family_id=fm.id存在。从fl航班中选择1,其中fl.family_id=fm.id和fm.flag Y和fm.flight为空。尝试通过先前的在线搜索连接,您应该有您的答案。但我如何为所有家庭而不是特定的家庭执行此操作,即我如何开始为所有家庭工作?
id   family_id   flight
-----------------------

1      1         1000
2      3         2000
update family fm set (flag, flight) = 
(
  select 'Y', fl.flight  from flight fl where fm.flag <> 'Y' and
(
  (fl.parent_id=fm.id and fm.parent_id is null )
 or fm.parent_id=fl.parent_id
)
)
where exists (select 1 from flight fl where fm.id=fl.parent_id or fl.parent_id=fm.parent_id );
Update family set flag='Y' 
    where id in(select id from family start with id=3 
                     connect by prior id=parent_id)