1. 오류 : NOT 의 위치가 틀렸네요.
- 서브쿼리 안쪽 LIKE 앞에 NOT을 붙일게 아니라
- 서브쿼리 바깥쪽 IN 앞에 NOT을 붙여야 합니다.
2. 개선
- LIKE 보다는 INSTR
- DISTINCT 불필요
- a.c1 IS NOT NULL 조건 불필요
3. 다양한 방법
- NOT IN
- NOT EXISTS
- OUTER JOIN & IS NULL
-- NOT IN --
SELECT a.no
, a.name
, a.c1
FROM tab1 a
WHERE a.no NOT IN (SELECT a.no
FROM tab2 u
WHERE INSTR(a.c1, u.c2) > 0
)
;
-- NOT EXISTS --
SELECT a.no
, a.name
, a.c1
FROM tab1 a
WHERE NOT EXISTS (SELECT 1
FROM tab2 u
WHERE INSTR(a.c1, u.c2) > 0
)
;
-- OUTER JOIN & IS NULL
SELECT a.no
, a.name
, a.c1
FROM tab1 a
LEFT OUTER JOIN tab2 u
ON INSTR(a.c1, u.c2) > 0
WHERE u.c2 IS NULL
;