2012-12-26 57 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錶行。現在我想使用這個查詢搜索人表,但我的查詢似乎崩潰了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

是的,查詢超時使Web服務器(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會花費一秒鐘,但隨後顯示值和其他值將使查詢超過2分鐘... –