2014-07-19 8 views
1

monkey-hangouts는 많은 원숭이를 많은 나무와 관련이 있으며 그 반대도 마찬가지입니다. 원숭이가 여러 나무에 달려있다. 트리가 여러 원숭이를 호스팅합니다. 관계 원숭이 - 행 아웃은 많은 원숭이를 나무로 모델링합니다.관련 레코드 수가 최소 인 SQL select 레코드

많은 수의 원숭이가 한 나무에 놀고 있습니다. 나는 여러 나무에 놀고있는 원숭이의 쿼리를 원합니다. 즉, 원숭이는 원숭이 행 아웃에서 둘 이상의 관련 기록이있는 원숭이입니다. 보너스로, 나는 쿼리 결과를 실제 행 아웃의 원숭이 X 트리 가입으로하고 싶습니다.

여기에는 행 아웃이있는 모든 원숭이를 선택하는 검색어입니다. 하나 이상의 수다방을 사용하는 원숭이로 제한하십시오.

select 
    m.*, t.* 
from 
    monkeys m 
inner join 
    monkey-hangouts h on m.id = h.monkey_id 
inner join 
    trees t on t.id = h.tree_id 
order by 
    m.id; 
당신은 원숭이에 집계과 나무의 수를 계산하여이 작업을 수행 할 수 있습니다

답변

2

이 쿼리는 모든 원숭이와 1 개 이상이 자신의 나무를 선택 원숭이 수다방.

select m.*, t.* 
from monkeys m 
inner join monkey_hangouts h on m.id = h.monkey_id 
inner join trees t on t.id = h.tree_id 
where m.id in (select monkey_id 
    from monkey_hangouts 
    group by monkey_id 
    having count(*) > 1) 
order by m.id 
+0

두 개 이상의 행 아웃이있는 원숭이의 원숭이 X 나무 원숭이 행 아웃을 반환합니다. 고맙습니다! –

2

:

select m.* 
from monkeys m join 
    monkey_hangouts mh 
    on m.id = mh.monkey_id 
group by m.id 
having count(distinct mh.tree_id) > 1; 

편집 : distinct mh.tree_id

+0

이 작품은 원숭이를 반환합니다. 내가 2 개의 답을 확인할 수 있었으면 좋겠다 +1. 고맙습니다! –