SELECT c.cust_id, c.cust_name, c.cust_cat, m.mgr_id, c.cemail1, c.cemail2,
m.name, m.mgr_cat, m.memail1, m.memail2
FROM cust_tbl c
LEFT OUTER JOIN mgr_tbl m
ON c.cust_id = m.cust_id
WHERE c.cemail1
IN(SELECT e.cemail1
FROM cust_tbl e
WHERE e.cemail1 IS NOT NULL
AND NOT REGEXP_LIKE (e.cust_cat, 'L|N|Q')
AND NOT REGEXP_LIKE (m.mgr_cat, 'L|N|Q'))
OR
c.cemail2
IN(SELECT e.cemail2
FROM cust_tbl e
WHERE e.cemail2 IS NOT NULL
AND NOT REGEXP_LIKE (e.cust_cat, 'L|N|Q')
AND NOT REGEXP_LIKE (m.mgr_cat, 'L|N|Q'))
OR
m.memail1
IN(SELECT d.memail1
FROM mgr_tbl d
WHERE d.memail1 IS NOT NULL
AND NOT REGEXP_LIKE (d.mgr_cat, 'L|N|Q')
AND NOT REGEXP_LIKE (c.cust_cat, 'L|N|Q'))
OR
m.memail2
IN(SELECT d.memail2
FROM mgr_tbl d
WHERE d.memail2 IS NOT NULL
AND NOT REGEXP_LIKE (d.mgr_cat, 'L|N|Q')
AND NOT REGEXP_LIKE (c.cust_cat, 'L|N|Q'))
;
1) CUST_CAT과 MGR_CAT에 L,N,Q가 없고 CEMAIL1, CEMAIL2, MEMAIL1, MEMAIL2가 NULL이 아닌 것만 위 코드의 둘째 라인까지의 컬럼에 해당하는 값 SELECT하기 입니다.
2) 위 코드를 실행하면 약 40분 소요되는데 단축 방법은 없나요?
3) 위 코드 실행하면 "MGR_CAT" 컬럽의 "L,N,Q가 없는 이멜일이 보여야 하는데, 간혹 L,N,Q 값이 있는 이메일도 SELECT 되는데 해결책은 없을까요?
4) 위 코드를 간단하게 할 수 없을까요?
테이블 구성
CUST_TBL
CUST_ID
CUST_NAME
CUST_CAT
CEMAIL1
CEMAIL2
MGR_TBL
MGR_ID
NAME
MGR_CAT
MEMAIL1
MEMAIL2
*하나의 CUST_ID에는 하나 이상의 MGR_ID가 연결되어 있습니다.