2개의테이블에서 중복된 시간 확인하는 쿼리 문의 0 3 1,759

by 김성수 [2013.02.14 14:51:52]


학교 테이블
ID IN TIME OUT TIME
A 100 200
B 200 300
C 300 400

직장 테이블
LOC IN TIME OUT TIME
A1 110 130
B1 130 140
C1 150 190
D1 290 310
E1 310 500
결과
ID LOC 결과 이유
A A1 학교 테이블 시간 범위에 직장 테이블의 시간이 포함 되있으므로
A B1 학교 테이블 시간 범위에 직장 테이블의 시간이 포함 되있으므로
A C1 학교 테이블 시간 범위에 직장 테이블의 시간이 포함 되있으므로
B D1 직장 테이블의 INTIME이 학교 테이블에 포함 됨.
C E1 직장 테이블의 INTIME이 학교 테이블에 포함 됨.

결론은 직장의 IN TIME을 학교에 TIME에 포함된 값을 가져오면 됩니다.


with  a as
(
select 'A' as ID, '100' AS INTIME, '200' as OUTTIME from dual
union all
select 'B' as ID, '200' AS INTIME, '300' as OUTTIME from dual
union all
select 'C' as ID, '300' AS INTIME, '400' as OUTTIME from dual
),
b as
(
select 'A1' as ID, '110' AS INTIME, '130' as OUTTIME from dual
union all
select 'B1' as ID, '130' AS INTIME, '140' as OUTTIME from dual
union all
select 'C1' as ID, '150' AS INTIME, '190' as OUTTIME from dual
union all
select 'D1' as ID, '290' AS INTIME, '310' as OUTTIME from dual
union all
select 'E1' as ID, '310' AS INTIME, '500' as OUTTIME from dual
)
SELECT * FROM A,B;


위와 같은 결과가 나와야 하는데 어떠한 함수를 써야하는지 방법이 어떻게 되는지
도움 요청 드립니다.
by 손님 [2013.02.14 15:03:14]
SELECT A.ID,B.ID LOC
FROM A,B
WHERE B.INTIME BETWEEN A.INTIME AND A.OUTTIME;

by 마농 [2013.02.14 15:25:15]
-- 시작시간과 종료시간을 서로 교차비교하시면 됩니다.
SELECT
  FROM a, b
 WHERE a.intime < b.outtime
   AND a.outtime > b.intime
;

by 아발란체 [2013.02.14 18:19:16]

항상 이보다 다른 정답은 없겠다... 하면 올라오는 마농님 쿼리!!!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입