데이터베이스 테이블에 동일한 레코드를 저장하는 구조가 있습니다. 이 기록들은 형제라고 생각할 수 있습니다. 예를 들어이 테이블에는 두 개의 레코드가 있습니다. 1 = 2 및 1 = 3이다. 그리고 주어진 레코드의 모든 형제를 반환하는 쿼리가 필요합니다. 예를 들어 보겠습니다. 오라클 형제 구조
이
은 두 개의 열이 내 테이블 : 나는이 개 기록을 가지고create table SIBLINGSTEST(col1 number, col2 number);
= 2 1 = 3
insert into SIBLINGSTEST values(1,2);
insert into SIBLINGSTEST values(1,3);
나는에 의해 연결이 상황에 가장 적합한 솔루션입니다 사용하여 생각했다
1
SELECT * FROM SIBLINGSTEST
START WITH (col1 = 1 or col2 = 1)
CONNECT BY NOCYCLE (
(PRIOR col1 = col1) or
(PRIOR col1 = col2) OR
(PRIOR col2 = col1) or
(PRIOR col2 = col2))
이 쿼리는 올바른 결과를 반환하여 두 행을 반환합니다.
매개 변수로 2를 사용하면 쿼리가 올바르게 실행되어 두 행을 모두 다시 반환합니다.
그러나 매개 변수로 3을 사용하면 예상 한대로 쿼리가 실행되지 않고 시작 행만 반환됩니다.
SELECT * FROM SIBLINGSTEST
START WITH (col1 = 3 or col2 = 3)
CONNECT BY NOCYCLE (
(PRIOR col1 = col1) or
(PRIOR col1 = col2) OR
(PRIOR col2 = col1) or
(PRIOR col2 = col2))
왜 2와 3의 결과가 다른지 궁금합니다. 어떤 도움이나 아이디어라도 부각 될 것입니다.
감사합니다. 예상대로
나는 그것을 얻지 않는다. 형제 란 무엇입니까? 한 열의 값이 두 번 이상 나타날 때? –
본인의 예를 들어 설명해 드리겠습니다. 1과 2는 형제입니다. 1과 3도 형제입니다. 그래서 2와 3도 형제입니다 (간접적으로). 내 테이블에 삽입 할 때 중복 값 확인이 있는데,이 경우는 내 관심사입니다. –
그리고 한 가지 더, 문제는 testin db에서 발생했으며, oracle 10g 버전 10.2를 실행 중입니다. 11g 데이터베이스에서 상황을 테스트 한 결과 아무런 문제가 없었습니다. 쿼리는 예상대로 실행됩니다. 11g으로 고정 된 버그라고 생각합니다. –