SQL Postgres의 다중 tag검색하기 Many to Many
위 사진처럼 커피(coffees)와 향(flavor) 테이블 사이에 Join 테이블이 있습니다. 해당 Join테이블은 한개의 row에 하나의 flavor만 조회가 가능합니다. 만약 2개 이상의 향이 있는 커피를 찾는다면 아래 쿼리문을 사용해야 합니다.
-- SQL Query1
SELECT DISTINCT title
FROM coffees JOIN coffees_flavors_flavor ON coffees.id = "coffeesId"
JOIN flavor ON flavor.id = "flavorId"
WHERE flavor.name = 'choco' OR flavor.name = 'banana';
Query1을 사용하면 Join, OR문을 이용하여 choco 또는 banana가 있는 레코드를 조회합니다. 문제는 choco는 있지만 banana가 없거나 반대의 경우도 모두 조회를 한다는 것입니다. 이를 위해서 GROUP BY를 사용하며 해당 갯수를 count해서 조회해야 합니다.
-- SQL Query2
SELECT DISTINCT title, COUNT(*) as count
FROM coffees JOIN coffees_flavors_flavor ON coffees.id = "coffeesId"
JOIN flavor ON flavor.id = "flavorId"
WHERE flavor.name = 'choco' OR flavor.name = 'banana'
GROUP BY title
HAVING flavor.count = 2;
Query2를 사용하면 구할려고 하는 해당 title을 조회할수 있습니다.
댓글
댓글 쓰기