2015-01-28 6 views
0

*이 MySQL의 테이블 가정 : 나는 회원이 그룹에 모두 "블루"와 "녹색where 절

사용을있는 행을 얻기 위해이 테이블을 조회 할 수있는 방법

id | group | members 
1 | blue |  Bob 
2 | red |  Tom 
3 |green |  Maria 
4 |blue |  Maria 
5 |red |  Bob 
6 |red |  Maria 
7 |yellow |  Bob 

을 절은 나를 위해 작동하지 않는 경우의 "IN"

예상 결과 :. "마리아"

편집 :

,

어쩌면 뭔가를 찾았습니다 ... "IN"배열에 n 변수를 사용하면 "HAVING"부분에 같은 n 값을 사용해야합니다. 이 진술을 시도하면 제대로 작동하는 것 같습니다. (의견은 높이 평가 됨)

 SELECT id,members 
    FROM my_table 
    WHERE `team` IN('blue', 'red', 'green') 
    GROUP BY members 
    HAVING COUNT(DISTINCT team) >= 3 

귀하의 의견은 무엇입니까?

+0

시도한 쿼리 표시 –

+0

어떤 쿼리를 시도 했습니까? – TZHX

+0

장 - FrançoisSavard, @juergen_d @ @TZHX 여기 내 SQL 문입니다 : F로 MY_TABLE \t로부터 ID, 회원 을 선택 WHERE \t 회원 에 의해 그룹에서 ('블루', '녹색') GROUP HAVEING COUNT (DISTINCT'group')> = 2 "IN"절에 변수가 2 개만있는 경우 명령문은 정상입니다. 그러나 세 번째 변수를 추가하면 기대 한 바를 얻지 못합니다. 내 말은, 나는 0 행을 얻을 것으로 예상한다. – angeltcho

답변

1

회원별로 그룹화하고 녹색과 파란색을 모두 가진 그룹 만 선택하십시오.

select members 
from your_table 
where `group` in ('blue','green') 
group by members 
having count(distinct `group`) = 2 

파란색과 녹색 만있는 레코드에 대해 쿼리가 필터링됩니다. 그런 다음 두 개의 서로 다른 그룹 인 파란색과 녹색을 가진 멤브레인 만 사용합니다.

+1

그런 다음'= 2'를'> = 2'로 변경하십시오. –

+0

@ Jean-FrançoisSavard : 질문을 읽었습니까? * 구성원이 모두 "파란색"과 "녹색"그룹에있는 행을 얻으려면이 테이블을 어떻게 쿼리 할 수 ​​있습니까? –

+0

@ Jean-FrançoisSavard : 'having'부분은 필수 사항이며 변경할 필요가 없습니다. –

0
select * 
from members mb 
inner join members mg on mg.members = mb.members and mg.`group` = 'green' 
where mb.`group` = 'blue' 

http://sqlfiddle.com/#!2/05d8b2/8/0

그것은 두 그룹 사이의 교차점 (내부 조인)이다.