Informix 계층 적 SQL 쿼리에 대한 약간의 도움이 필요합니다. 다음 구조의 테이블이 있습니다.
create table empl_relation (
employee_id char(10),
manager_id char(10));
employee_id | manager_id
5148 null
5149 5148
5150 5149
5151 5148
5152 5151
5154 5148
5155 5154
다음 쿼리를 성공적으로 실행할 수 있습니다.
SELECT employee_id, manager_id FROM empl_relation
START WITH employee_id = 5148
CONNECT BY PRIOR employee_id = manager_id
ORDER SIBLINGS BY employee_id;
위의 표에 지정된 정확한 계층 구조를 반환합니다. 그러나 나는 여기서 뭔가 다른 것을 이루려고 노력하고있다. 계층 구조의 직원 ID가 입력으로 주어지면 동일한 결과 집합을 얻으려고합니다. 예를 들어, 쿼리에서 입력 employee_id로 5154를 지정하면 입력 직원 ID의 모든 부모와 자식, 자식 및 손자 손을 가져올 수 있어야합니다. 정확히 말하면 위에서 언급 한 쿼리를 실행하여 얻은 것과 똑같은 결과 집합을 원합니다.
단일 쿼리로 달성 할 수 있습니까? 그렇다면, 이것을 달성하는 데 도움을 주시겠습니까?
EDIT
좋아, 나는 이것을 달성하는 한 가지 방법을 찾았지만 다음과 같이 2 개의 쿼리를 실행하는 것이 포함됩니다.
SELECT employee_id, manager_id FROM empl_relation
START WITH employee_id = 5150
CONNECT BY employee_id = PRIOR manager_id
ORDER SIBLINGS BY employee_id ;
다음을 반환합니다.
employee_id | manager_id
5148
5149 5148
5150 5149
그런 다음 결과 집합을 반복 한 다음 아래 쿼리를 실행하여 전체 계층 트리를 가져옴으로써 애플리케이션 계층에서 부모 employee_id를 검색 할 수 있습니다.
SELECT employee_id, manager_id FROM empl_relation
START WITH employee_id = 5148
CONNECT BY PRIOR employee_id = manager_id
ORDER SIBLINGS BY employee_id;
이것은 잘 작동하지만 단일 쿼리로 이것을 달성 할 수 있다면 정말 좋을 것입니다.
Jonathan의 답장에 영감을 받아 다음과 같이 그의 쿼리를 조금 더 짧게 만들었습니다.
SELECT employee_id,manager_id FROM empl_relation
START WITH employee_id =
(SELECT employee_id
FROM empl_relation er
WHERE er.manager_id IS NULL
START WITH employee_id = 5150 CONNECT BY employee_id =
PRIOR manager_id)
CONNECT BY
PRIOR employee_id = manager_id
ORDER BY employee_id;
이것은 또한 잘 작동하는 것 같습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다