안녕하세요. 현재 쿼리를 작성하고 있다가 도저히 생각이 나질 않아 조언을 얻고자 글을 남깁니다..
props 테이블 [userId, name] 을 가지고 있습니다.(name은 속성명입니다.)
userId | name |
1 | A |
1 | B |
2 | B |
3 | A |
3 | B |
3 | C |
4 | A |
만약 위와 같은 데이터가 있다고 가정할 경우
name을 검색하기 위해 ["A","B"]의 데이터를 받았습니다.
1. 하나라도 포함된 내용을 찾기 위해서는 아래와 같은 쿼리를 날렸을 경우 userId 1,2,3,4를 찾을 수 있었습니다.
select userId from props where name in ("A","B") group by userId;
2. 모두를 가지는 내용을 찾기 위해서는 어떻게 쿼리를 처리해야할지를 모르겠습니다.
만약 위와 같이 A,B를 찾는다면 검색 결과는 userId 1,3 두명이 나와야합니다.
팁만이라도 주시면 감사합니다!
with tmp(userid, name) as ( select 1, 'A' union all select 1, 'B' union all select 2, 'B' union all select 3, 'A' union all select 3, 'B' union all select 3, 'C' union all select 4, 'A' ) select userid from ( select userid, count(1) as cnt from tmp where name in ('A', 'B') group by userid) t where cnt = 2;
똑같은 쿼리인데요.
(name, userid )로 인덱스가 없다면 만드는 것도 한 방법인 것 같습니다.