MySQL:限制WHERE IN列表的结果

时间:2017-07-06 20:14:49

标签: mysql sql

假设my_table中有数百万条记录。

这是我从列表中提取具有特定名称的行的查询:

SELECT * FROM my_table WHERE Name IN ('name1','name2','name3','name4')

如何限制每个name1,name2等返回的结果? 以下查询将限制整个结果(为100)。

SELECT * FROM my_table WHERE Name IN ('name1','name2','name3','name4') LIMIT 100

我需要为每个名字限制为100个。

2 个答案:

答案 0 :(得分:3)

这在MySQL中有点痛苦,但最好的方法可能是变量:

select t.*
from (select t.*,
             (@rn := if(@n = name, @rn + 1,
                        if(@n := name, 1, 1)
                       )
             ) as rn
      from my_table t cross join
           (select @n := '', @rn := 0) params
      order by name
     ) t
where rn <= 100;

如果要将其限制为名称的子集,请将where子句添加到子查询中。

注意:如果您想要选择某些行 - 例如最旧的或最新的或最大的或最高的 - 只需在子查询中向order by添加第二个键。

答案 1 :(得分:-1)

尝试 SELECT * FROM my_table WHERE Name IN(&#39; name1&#39;,&#39; name2&#39;,&#39; name3&#39;,&#39; name4&#39;)FETCH FIRST 100 ROWS ONLY < / p>