2015-04-17 54 views
-1

我有2表 -Oracle查詢 - 分類

SUBJECT_TABLE

SUBJECT_UID SUBJECT | PARENT_SUBJECT_UID | SUBJECT_LEVEL


SUBJECT_ITEM_TABLE

SUBJECT_ITEM_UID | SUBJECT_UID | ACTIVE_DATE

要求:

  • 我需要把所有從有ACTIVE_DATE比SUBJECT_ITEM表提供當前日期較小的項目主題表的科目。
  • 如果父母沒有任何可用的項目,但如果孩子有,那麼我也需要父母。

任何幫助表示讚賞。謝謝。

+1

到目前爲止您嘗試了哪些查詢? – MT0

回答

0

如果你想只檢查孩子的行爲每個父,那麼你可以使用此查詢:

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。

+0

工作就像一個魅力!謝謝。 –

+0

哪個查詢是需要的?也請閱讀:[someone-answers](http://stackoverflow.com/help/someone-answers);-) –

+0

第二個查詢工作,因爲我必須檢查兒童,孫輩等。相信我,我試圖投票,但沒有足夠的「聲譽」:( –