0

personとevent_registrationの2つのリレーショナルテーブルがあり、10以下のイベントに登録したすべての人を選択したいと思います。正しいと思われるクエリを見つけました。次のクエリでこれらの人物を見つけることができます。

  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がクラッシュするように見えるため、これは機能しません。私は何が間違っているのですか?

4

1 に答える 1

0
SELECT distinct id FROM person 
WHERE id IN
    (SELECT person_id 
     FROM event_registration 
     GROUP BY person_id HAVING COUNT(*) <= 10)
于 2012-12-26T19:15:52.783 に答える