2012-12-26 4 views
0

두 개의 관계형 테이블 person과 event_registration이 있으며 10 개 이하의 이벤트에 등록한 모든 사람을 선택하고 싶습니다. 나는 정확한 것으로 보이는 쿼리를 발견했습니다. 그것은 다음과 같은 쿼리를이 사람을 찾을 수 있습니다mysql : 일정한 양의 관계형 행을 가진 사람을 선택하십시오.

SELECT person_id 
    FROM event_registration 
GROUP BY person_id 
    HAVING COUNT(*) <= 10 

주, event_registration.person_id가 person.id 일치하는 테이블 행과 관련이 있습니다. 이제 person 테이블을 검색하는이 쿼리를 사용하고 싶습니다. 그러나 내 쿼리가 mysql을 손상시키는 것처럼 보입니다. 왜?

SELECT id 
    FROM person 
WHERE id IN (
     SELECT person_id 
     FROM event_registration 
    GROUP BY person_id 
     HAVING COUNT(*) <= 10 
) 

나는 다른 속성 보이기 때문에 쿼리가 변경하려는 이유 때문에 같은 (더 가까이하기 위해) 마지막 질의 모양을 뭔가 : 물론이 아무튼의

SELECT * 
    FROM person 
WHERE name LIKE '%something%' 
    AND AGE > 20 
    AND id IN (
     SELECT person_id 
     FROM event_registration 
    GROUP BY person_id 
     HAVING COUNT(*) <= 10 
) 

mysql이 충돌하는 것처럼 작동하지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

'mysql이 고장났다'는 것은 무엇을 의미합니까? 쿼리가 시간 초과됩니까? –

+0

예 웹 서버 (IIS 7)를 다시 시작할 때까지 쿼리가 시간 초과되어 더 이상 응답하지 않습니다. –

답변

0
SELECT distinct id FROM person 
WHERE id IN 
    (SELECT person_id 
    FROM event_registration 
    GROUP BY person_id HAVING COUNT(*) <= 10) 
+0

귀하의 질의는 Michael의 연구이지만, 그 이유는 모르겠습니다. –

+0

그런 다음 각기 다른 사람에 대해 한 번만 계산을 수행하는 '별개'는 아마 차이를 만들었을 것입니다. –

+0

그러나 하위 쿼리가없는 ID를 찾는 데는 1 초 정도 걸리 겠지만 값을 다른 값과 함께 표시하면 쿼리가 2 분 이상 걸립니다. –