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을 조회할수 있습니다.

















댓글

이 블로그의 인기 게시물

Lesson 12_1 프로퍼티 노드(Property Node)

DAQ로 전압 측정하기-2

Lesson 12_2 참조를 이용한 프로퍼티노드(Property Node)