如果你想只檢查孩子的行爲每個父,那麼你可以使用此查詢:
SQLFiddle demo
with st as (
select subject_uid suid, parent_subject_uid puid,
nvl((select 1 from subject_item si
where si.subject_uid = st.subject_uid and active_date<sysdate), 0) it
from subject_table st)
select suid, puid, it from st
where it=1 or exists (select 1 from st st2 where it=1 and puid=st.suid)
但是,如果你想進行檢查的子女,孫子女(等)那麼你需要分級子查詢:
SQLFiddle demo
with st as (
select subject_uid suid, parent_subject_uid puid,
nvl((select 1 from subject_item si
where si.subject_uid = st.subject_uid and active_date<sysdate), 0) it
from subject_table st),
sh as (
select suid, puid, it, connect_by_root(suid) root from st
connect by prior suid= puid)
select suid, puid, it from st
where it=1 or exists (select 1 from sh where it=1 and root=st.suid)
在我的示例中,id = 2的行沒有項目,他的孩子也是,但是孫子符合標準,所以第二個查詢也顯示id = 2。
到目前爲止您嘗試了哪些查詢? – MT0