idx name before_idx
22 테스트1
23 테스트2
24 테스트1 22
현재 테이블이 이런형식으로 현재 글에 이전글이 있을경우 이걸글 번호(before_idx)에
저장을 하고 있습니다.
이때 22나 24로 조회를 할경우 현재번호와 이전번호를 체크해서
연관된 값을 (22,24)을 가져올려구 쿼리를 만들었는데요
select * from test
where idx='24'
OR idx = (SELECT before_idx FROM test WHERE idx='24')
OR idx= (SELECT idx FROM test WHERE before_idx='24);
이렇게 했는데 흠 뭔가 복잡한거 같은데 이방법말고 다른방법이 뭐가 있을지 궁금하네요.
부족한 내공이니 많은 가르침 부탁드릴께요
감사합니다.
-- 계층 구조로 볼 수 있습니다. => 계층이 2단계 뿐인거죠. SELECT * FROM test START WITH idx = 24 CONNECT BY idx = PRIOR before_idx UNION ALL SELECT * FROM test WHERE LEVEL != 1 START WITH idx = 24 CONNECT BY PRIOR idx = before_idx ; -- 2단계 고정이라면 굳이 계층구조 쿼리를 사용하지 않아도 됩니다. -- 단, 어떻게 하든 테이블을 한번만 읽고 처리하기는 힘듭니다. -- 계층 쿼리를 이용할지 안할지는 업무 특성에 맞추어 판단하시면 됩니다.