2013-10-11 4 views
3

번호 범위 목록이있는 테이블이 있습니다. 이 숫자 중 하나가 서로SQL- 숫자 범위가 겹치지 않습니까?

SQL Fiddle here

예 중복, 바이올린의 마지막 두 행을 서로 중첩에 범위 있을지 알 필요가있다. 쿼리 결과에 어떻게 표시할지 모를 일입니다.

도움을 주시면 감사하겠습니다.

편집 :이 작업을하지만 것으로 보인다 것 확실하지 경우 :

SELECT 
    * 
FROM 
(
    SELECT 
    FROM_NUM, 
    TO_NUM, 
    LEAD(FROM_NUM) OVER (ORDER BY FROM_NUM) A 
    FROM 
    RANGES 
) RANGES 
WHERE 
    A < TO_NUM 
+0

기술적되지 않습니다 'INSERT INTO 범위를 VALUES (2501,2501)' 너무 겹쳐? –

+0

그들은 서로 겹치지 만 다른 행은 중복되지 않으므로이 점에 대해 걱정하지 않습니다. – Lock

답변

0
SELECT RANGES.FROM_NUM AS BASE_FROM_NUM, RANGES.TO_NUM AS BASE_TO_NUM, 
    OVERLAP.FROM_NUM AS OVERLAP_FROM_NUM, OVERLAP.TO_NUM AS OVERLAP_TO_NUM 
FROM RANGES 
INNER JOIN RANGES OVERLAP 
ON (((OVERLAP.FROM_NUM <= RANGES.FROM_NUM) AND (OVERLAP.TO_NUM >= RANGES.FROM_NUM)) 
OR ((OVERLAP.FROM_NUM <= RANGES.TO_NUM) AND (OVERLAP.TO_NUM >= RANGES.TO_NUM))) 
AND ((OVERLAP.FROM_NUM <> RANGES.FROM_NUM) AND (OVERLAP.TO_NUM <> RANGES.TO_NUM)) 

마지막 줄이 아니라 자신에 대한 중복을보고 행을 중지 할 수 있습니다. 실제로, 고유 한 키를 사용하여 제거 할 (다만 만일 당신이 /에서 숫자 같은과 중복 행이) :

AND (OVERLAP.ID <> RANGES.ID) 
관련 문제