DB
다중 태그 검색 SQL문
땅부자몽구스
2021. 10. 31. 21:39
post 테이블과 tag 테이블이 있고,
두 테이블을 매핑하는 post_tag_relation이라는 테이블이 있다고 가정한다.
사용자가 여러 개의 태그를 모두 가지고 있는 포스팅만을 조회한다고 할 때의 SQL 문은 아래와 같다.
SELECT post_id
FROM post_tag_relation
WHERE tag_id IN (SELECT id FROM tag WHERE name IN ('tag1','tag2'))
GROUP BY post_id
HAVING COUNT(tag_id) >= 2;
위의 SQL문을 조금 더 최적화하려면, 서브쿼리를 조인으로 바꾸면 된다.
left outer join이 서브쿼리보다 빠르기 때문이다.
(출처: https://stackoverflow.com/questions/2577174/join-vs-sub-query)
SELECT post_id
FROM post_tag_relation ptr
LEFT JOIN tag t ON ptr.tag_id = t.id
WHERE t.name IN ('tag1','tag2')
GROUP BY post_id
HAVING COUNT(tag_id) >= 2;