2015-04-17 2 views
-1

У меня есть 2 tables-Oracle запрос - Таксономия

SUBJECT_TABLE

SUBJECT_UID ПРЕДМЕТ | 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

И какой запрос нужен? Также, пожалуйста, прочитайте: [кто-то-ответы] (http://stackoverflow.com/help/someone-answers) ;-) –

+0

Второй запрос работал, поскольку мне приходилось проверять детей, внуков и т. Д. И, поверьте, я попытался голосовать, но не хватало «репутации» :( –

Смежные вопросы