Это ответвление следующего вопроса:
Выделить дубликаты между двумя наборами результатов
Как и в комментарии к этим вопросам, я пытаюсь реализовать свой запрос, используя специальный синтаксис Oracle «CONNECT BY». У меня проблемы с поиском (четкой) информации о том, как реализовать синтаксис в моем случае.
Мой запрос:
SELECT pi.compressed_name, pi.phn, to_char(pi.date_of_birth , 'YYYY/MM/DD') as date_of_birth,
to_char(pe.started_on , 'YYYY/MM/DD' ) as medicare_eligibility_start,
to_char(pe.ended_on , 'YYYY/MM/DD' ) as medicare_eligibility_end
FROM medcrtr.forest_node fnpppp,
medcrtr.forest_node fnppp,
medcrtr.forest_node fnpp,
medcrtr.forest_node fnp,
medcrtr.forest_node fn,
medcrtr.group_member gm,
medcrtr.program_eligibility pe,
person_index pi
WHERE gm.entity_type_id = 1
AND fn.source_id = gm.group_id
AND fn.entity_type_id = 3
AND fnp.id = fn.parent_id
AND fnpp.id = fnp.parent_id
AND fnppp.id = fnpp.parent_id
AND fnpppp.id = fnppp.parent_id
AND pe.person_id = gm.source_id
AND pe.sub_program_id = fnpp.parent_id
AND pi.person_id = gm.source_id
AND fnppp.id = 1169
AND (gm.ended_on >= SYSDATE OR gm.ended_on IS NULL)
Может кто-нибудь указать мне правильное направление, чтобы преобразовать его в другой синтаксис?
Я думаю о чем-то вроде:
SELECT pi.compressed_name, pi.phn, to_char(pi.date_of_birth , 'YYYY/MM/DD') as date_of_birth,
to_char(pe.started_on , 'YYYY/MM/DD' ) as medicare_eligibility_start,
to_char(pe.ended_on , 'YYYY/MM/DD' ) as medicare_eligibility_end
FROM medcrtr.forest_node fn,
group_member gm,
program_eligibility pe,
person_index pi
WHERE gm.entity_type_id = 1
AND fn.source_id = gm.group_id
AND fn.entity_type_id = 3
AND pe.person_id = gm.source_id
--AND pe.sub_program_id = fnpp.parent_id ???
AND pi.person_id = gm.source_id
--AND fnppp.id = 1169 ???
AND (gm.ended_on >= SYSDATE OR gm.ended_on IS NULL)
CONNECT BY PRIOR fn.id=fn.parent_id
Очевидно, что это не работает, и я пока не знаю, как интегрировать функциональность fnpp .... Любая помощь?