본문 바로가기

MySQL

[MySQL] 두개의 컬럼을 IN 절로 비교하기

쿼리 조건을 구성하다보면 멀티키와 같은 컬럼 중 일부를 제외하고 싶을 때가 있습니다.
1건이 아니라 여러건을 조회할 때

기대치 : 1-a, 2-b, 3-c만 원할 때

SELECT *
FROM foo
WHERE id IN (1, 2, 3) AND bar IN ('a', 'b', 'c')
로 구성하면 1-a, 1-b, 1-c.. 3-b, 3-c가 조회됩니다. 교차로 적용되기 때문입니다.
그렇다면 명확하게 1-a, 2-b, 3-c만 매칭하려면..

정확히 매칭

SELECT *
FROM foo
WHERE (id, bar) IN ((1, 'a'), (2, 'b'), (3, 'c'))
이 경우 IN절 비교 시 2개의 컬럼을 조합하여 비교합니다.
id가 1이고 bar가 'a'인 경우, id가 2이고 bar가 'b'...
NOT IN 조건도 동일하게 작동합니다.

참고
- http://stackoverflow.com/questions/4622453/where-col1-col2-in-sql-subquery-using-composite-primary-key