【发布时间】:2014-12-19 00:46:09
【问题描述】:
我在 Oracle 中有 2 个表,其结构类似于:
家庭表
id member parent_id flag flight
---------------------------------
1 A null N null
2 B 1 N null
3 C null N null
4 D 3 N null
5 E 3 N null
6 F null N null
7 G 6 N null
航班表
id family_id flight
-----------------------
1 1 1000
2 3 2000
家庭表中 id 为 4,5 的行是第 3 行的孩子,第 2 行是第 1 行的孩子。
现在,我需要编写一个 oracle 更新 sql 来不仅用航班更新相应的父行并将标志更改为 Y,而且子行也应该相应地更新。如果航班表中没有对应的家庭航班分配,则第 6,7 行应保持不变。
进行父母更新并为父母轻松找到孩子。但是是否可以在一个 sql 中完成所有更新?
谢谢。
更新
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 );
这行得通!
【问题讨论】:
-
在此处发布“easy”部分。
-
您不能使用单个 UPDATE 语句更新多个表。
-
我不打算更新多个表。只有族表需要更新,但更新必须与父行一起级联到子行。我怎样才能修改这个sql来做一个级联:UPDATE family fm SET (fm.flight, flag) = (SELECT fl.flight, "Y" FROM flight fl WHERE fl.family_id = fm.id) WHERE EXISTS (SELECT 1 FROM flight fl WHERE fl.family_id = fm.id and fm.flag "Y" and fm.flight IS NULL)
-
尝试在线搜索
connect by prior,您应该有答案。
标签: sql oracle parent-child hierarchy