Mysql에서는 MINUS
를 사용할 수 없다. 대신NOT IN
을 통해 같은 쿼리문을 만들 수 있다.
예를들어MINUS
를 아래와 같이 쓴다면,
SELECT userid, purchaseid FROM tb1
MINUS
SELECT userid, purchaseid FROM refund_table ;
NOT IN
을 WHERE
절에 써서 MINUS
와 같은 결과를 가질 수 있다. 여기서 기억할 점은 아래처럼 2개 이상의 값에 대해서도 NOT IN
의 값으로 넣을 수 있다는 것이다.
SELECT userid, purchaseid
FROM tb1 a
WHERE (userid, purchaseid) NOT IN
(SELECT userid, purchaseid FROM refund_table));
그래서 JOIN을 최대한 쓰지 않으면서 서브쿼리로 조건을 걸어주는 방식으로 쿼리문을 짜는 곳도 많다고 한다. 예를들어 아래와 같은 두 테이블이 있고, LMS에 마케팅 동의(Y)를 하고 4월 이전에 가입한 user을 찾으려고 한다.
✅JOIN문 활용
SELECT DISTINCT a.userid FROM user_table a
INNER JOIN marketing_table b
ON a.userid = b.userid
WHERE b.YN = 'Y' and b.marketing_method = 'LMS' and a.createdate < '2022-03-31' );
✅WHERE절에 서브쿼리 활용
SELECT userid FROM user_table
WHERE userid IN
(SELECT userid FROM marketing_table WHERE marketing_method = 'LMS' and YN = 'Y')