-
다중 태그 검색 SQL문DB 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;
'DB' 카테고리의 다른 글
데이터베이스를 Docker 환경에서 운영하면 안되는 이유 (0) 2021.11.07 PostgreSQL 외부 접속 허용 및 IP주소 제한 (0) 2021.11.07 Ubuntu에서 PostgreSQL 설치 및 데이터 저장 위치 변경하기 (0) 2021.10.26 데이터베이스별 boolean 데이터 타입(PostgreSQL, MySQL, Oracle) (0) 2021.10.15 PostgreSQL timestamp vs timestamptz (0) 2021.10.14