| 테이블A | ||
| CODE | DEL_START_DT | DEL_END_DT |
| A001 | 2024-09-19 19:00:00 | 2024-09-19 23:59:00 |
| A002 | 2024-09-19 20:00:00 | 2024-09-19 23:59:00 |
| A003 | 2024-09-19 17:00:00 | 2024-09-19 23:59:00 |
| 테이블B | ||
| CODE | DATE_TIME | DESC |
| A001 | 2024-09-19 18:00:00 | ABCD |
| A001 | 2024-09-19 18:00:00 | GGGG |
| A001 | 2024-09-19 18:00:00 | KKKK |
| A001 | 2024-09-19 19:00:00 | DDD |
| A001 | 2024-09-19 19:00:00 | GGG |
| A001 | 2024-09-19 20:00:00 | … |
| A002 | 2024-09-19 18:00:00 | … |
| A002 | 2024-09-19 18:00:00 | … |
| A002 | 2024-09-19 19:00:00 | … |
| A002 | 2024-09-19 20:00:00 | … |
| A002 | 2024-09-19 20:00:00 | … |
| A002 | 2024-09-19 20:00:00 | … |
| A003 | … | … |
| … | … | … |
| … | … | … |
| … | … | … |
테이블 A 의 코드별로 start_dt 와 end_dt가 있습니다.
코드별 start_dt와 end_dt를 테이블 B에서 코드별 해당 되는 범위의 데이터를 삭제하고 싶습니다.
예를들어 A001 를 보시면 2024-09-19 19:00:00 ~ 2024-09-19 23:59:59 의 범위를 가진 코드값을 테이블 B에서 노란색 영역만큼만 삭제를 해야 합니다.
예시는 A001 만 했는데 A001 ~ N 까지 입니다.
(환경은 mssql 입니다.)
집합적으로 생각을 하려고 해도 도저히 생각이 나지를 않네요 ㅜㅜ.. 커서를 이용해서 돌려야 하나 생각이 들다가 이곳에서 뭔가 알수 있지 않을까 하여 질문 드립니다.
-- 1. 삭제 대상 확인 --
SELECT *
FROM b
WHERE EXISTS (SELECT 1
FROM a
WHERE b.code = a.code
AND b.date_time BETWEEN a.del_start_dt AND a.del_end_dt
)
;
-- 2. 삭제 --
DELETE
FROM b
WHERE EXISTS (SELECT 1
FROM a
WHERE b.code = a.code
AND b.date_time BETWEEN a.del_start_dt AND a.del_end_dt
)
;