2010-08-19 2 views
1

이가 다음과 같은 질문의 파생물이다 : 그 질문에 코멘트로로 Single out duplicates between two result sets오라클 'CONNECT BY'구문

, 나는 오라클의 특별한 '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의 기능을 통합하는 방법을 모른다 ... '의 yet.Any 도움말 ?

+0

죄송합니다, 당신은에 의해 무슨 뜻 이죠 "는이 다시 잘라 .. . " 약간의 데이터를 얻을 것입니다 –

+1

먼저 계층 적 쿼리가'forest_node' 테이블의 컨텍스트에서 작동하는지 확인한 다음 JOIN에 대해 tacking을 시작하십시오. –

답변

1

는 잘 모르겠어요하지만 난 당신이 start with 절을 놓치고 생각 :

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 pi.person_id = gm.source_id 
    AND (gm.ended_on >= SYSDATE OR gm.ended_on IS NULL) 
start with fn.id = 1169 /*THis is where the recursion will start */ 
CONNECT BY PRIOR prior fn.id=fn.parent_id /*specify you want the current node's parent id to match the previous node's id*/ 

좋은 참조 : http://www.adp-gmbh.ch/ora/sql/connect_by.html