Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql:选择具有一定数量关系行的人员_Mysql_In Clause_Having Clause - Fatal编程技术网

mysql:选择具有一定数量关系行的人员

mysql:选择具有一定数量关系行的人员,mysql,in-clause,having-clause,Mysql,In Clause,Having Clause,我有两个关系表,person和event_registration,我想选择所有注册了10个或更少事件的人。我发现了一个似乎正确的问题。它可以通过以下查询找到这些人: SELECT person_id FROM event_registration GROUP BY person_id HAVING COUNT(*) <= 10 注意,event_registration.person_id与匹配person.id的表行相关。现在我想使用这个查询搜索person表,

我有两个关系表,person和event_registration,我想选择所有注册了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似乎崩溃了。我做错了什么?

你说的“崩溃”是什么意思?查询超时了吗?是的,查询超时了,使web服务器IIS 7在我重新启动之前不再响应。然后,distinct(对每个不同的人只进行一次计数)可能造成了差异。但是,我不明白,在没有子查询的情况下查找ID需要一秒钟,但是,如果将这些值与其他值一起显示,则查询将花费2分钟以上的时间。。。
SELECT distinct id FROM person 
WHERE id IN
    (SELECT person_id 
     FROM event_registration 
     GROUP BY person_id HAVING COUNT(*) <= 10)