서로 연관이 없어보이는 자료 샘플 말구요.
간단하게라도 연관성이 보이는 자료로 해서
결과값도 원본으로부터 도출된 정확한 자료를 보여주셔야죠.
테이블 직접 캡쳐해서 보여달라는게 아니고
엑셀로 샘플자료 간단하게 타이핑해서 만들어서 보여달라는 거에요.
자료랑 상관 없는 기본적인 답변 드릴께요.
두 테이블을 연결하여 조회하려면 조인하면 됩니다.
두 테이블간의 연결관계를 나타내는 조인조건을 주면 되구요.
위에 제시하신 조건이 맞다면? 다음과 같은 쿼리가 됩니다.
다만, 조건이 맞는지 의심이 가긴 합니다.
SELECT * FROM 테이블1 , 테이블2 WHERE 테이블2.시작날짜 > 테이블1.시작날짜 AND 테이블2.종료날짜 < 테이블1.종료날짜 ;
테이블1
시:분 | 시:분 |
2:40 | 2:45 |
6:30 | 6:35 |
9:57 | 9:58 |
10:12 | 10:13 |
10:14 | 10:15 |
10:20 | 10:27 |
10:29 | 10:49 |
13:55 | 13:57 |
17:15 | 17:27 |
21:05 | 21:10 |
테이블2
시:분 | 시:분 |
0:00 | 0:50 |
1:00 | 2:30 |
3:10 | 5:50 |
6:00 | 7:50 |
7:50 | 9:50 |
10:00 | 11:30 |
12:10 | 14:50 |
15:00 | 18:50 |
19:00 | 21:00 |
21:15 | 22:50 |
결과값
6:30 | 6:35 |
10:12 | 10:13 |
10:14 | 10:15 |
10:20 | 10:27 |
10:29 | 10:49 |
17:15 | 17:27 |
이렇게 출력되기를 바랍니다.
샘플이 적절한지 모르겠네요.
테이블2의 한행(시작,종료) 마다 으로 테이블1의 모든 Row 를 필터하도록 하는게 목적입니다.
테이블1의 한행을 검사할때 테이블2의 하나의 행에라도 시간 범위가 속하면
출력 값에 나오고 하고자 합니다.
WITH t1 AS ( SELECT 0 id, '02:40' sdt, '02:45' edt UNION ALL SELECT 1, '06:30', '06:35' UNION ALL SELECT 2, '09:57', '09:58' UNION ALL SELECT 3, '10:12', '10:13' UNION ALL SELECT 4, '10:14', '10:15' UNION ALL SELECT 5, '10:20', '10:27' UNION ALL SELECT 6, '10:29', '10:49' UNION ALL SELECT 7, '13:55', '13:57' UNION ALL SELECT 8, '17:15', '17:27' UNION ALL SELECT 9, '21:05', '21:10' ) , t2 AS ( SELECT 0 id, '00:00' sdt, '00:50' edt UNION ALL SELECT 1, '01:00', '02:30' UNION ALL SELECT 2, '03:10', '05:50' UNION ALL SELECT 3, '06:00', '07:50' UNION ALL SELECT 4, '07:50', '09:50' UNION ALL SELECT 5, '10:00', '11:30' UNION ALL SELECT 6, '12:10', '14:50' UNION ALL SELECT 7, '15:00', '18:50' UNION ALL SELECT 8, '19:00', '21:00' UNION ALL SELECT 9, '21:15', '22:50' ) -- a 가 b 에 포함 -- SELECT * FROM t1 a INNER JOIN t2 b ON a.sdt > b.sdt AND a.edt < b.edt ; -- a 가 b 를 포함 -- SELECT * FROM t1 a INNER JOIN t2 b ON a.sdt < b.sdt AND a.edt > b.edt ; -- a 와 b 가 조금이라도 겹치면 포함 : 시작,종료 교차 비교 -- SELECT * FROM t1 a INNER JOIN t2 b ON a.sdt < b.edt AND a.edt > b.sdt ;