cellion
402
2020-02-21 11:19:52 작성 2020-02-21 11:22:22 수정됨
3
155

필터기능 구현중에 SQL 쿼리 질문입니다.


상품 테이블

상품 번호

pd1

pd2

pd3


카테고리 테이블

카테고리번호

cate1

cate2

cate3

cate4

cate5


상품-카테고리 매핑 테이블

상품번호|카테고리번호

pd1|cate1

pd1|cate2

pd1|cate3

pd1|cate4

pd2|cate2

pd2|cate3

pd2|cate4

pd3|cate2

pd3|cate3


이런 테이블 구조입니다.

상품-카테고리 매핑 테이블테이블에서

cate2,cate3,cate4에 모두 포함된 상품만 찾고싶은데 쿼리를 어떻게 해야 할까요?


원하는 결과는

p1,p2가 나오면 됩니다.(p3은 cate4에 포함안됨)

0
0
  • 답변 3

  • 레버리지
    2k
    2020-02-21 11:45:44 작성 2020-02-21 11:46:00 수정됨


    SELECT 상품번호
      FROM 상품-카테고리 매핑 테이블 
     GROUP BY 상품번호
     HAVING COUNT(CASE WHEN 카테고리번호 IN ( '카테고리2', '카테고리3', '카테고리4' ) THEN 1 END ) = 3


    1
  • cellion
    402
    2020-02-21 13:01:50

    @레버리지님 답변 감사합니다.


    추가로 in에 3개가 들어가면 count () = 3 을 해줘야하는데 저 3이라는 상수를 어떻게 끌어올 방법 없을까요?

    0
  • 레버리지
    2k
    2020-02-21 13:12:29

    list.size() 를 인자값으로 받으면 되지 않을까요. 자세한건 소스를 봐야 알겠네요.

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.