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