使用限制结果加入查询

时间:2016-05-17 10:19:54

标签: mysql

ID  Name
1   A
2   B
3   C
4   D
5   E
6   F
7   G
8   H
9   I
10  J

其他表格是

ID  Image   Date
1   aa.jpg  5/17/2016
1   bb.jpg  5/20/2016
1   aa1.jpg 5/15/2016
2   1.jpg   5/17/2016
3   2.jpg   5/17/2016
3   3.jpg   5/20/2016
4   x.jpg   5/17/2016
8   tt.jpg  5/17/2016
9   ww.jpg  5/21/2016
10  21.jpg  5/17/2016
5   67.jpg  5/17/2016
6   3d.jpg  5/17/2016
7   w3.jpg  4/17/2016
7   y78.jpg 5/17/2016

我写了下面的查询来得到这个结果。

select t1.id,t1.name,t2.image,t2.date 
from emp t1 
join images t2 ON t1.id = t2.id

结果:

ID  Name    Images  Date
2   B       1.jpg   5/17/2016
1   A       bb.jpg  5/20/2016
1   A       aa1.jpg 5/15/2016
1   A       aa.jpg  5/17/2016
.           
.           
.           

这是我的实际问题: 我必须添加限制功能,如限制0,100。在我的限制0,3 所以我的期望是,如果任何id随查询而来,那么所有id都应该来。

1 个答案:

答案 0 :(得分:1)

我猜您的要求是选择一组ID值,这些值会在结果集中产生大约100行。

没有LIMIT

ORDER BY毫无意义;你只是选择一个不可预测的结果集子集。所以,我猜你想要ORDER BY ID

首先,您需要确定您的集合中有哪些ID值。那相对简单。 (我正在使用LIMIT 0,5)。

          SELECT DISTINCT id
            FROM (
                   select t1.id
                     from emp t1
                     join images t2 ON t1.id = t2.id
                    order by t1.id
                    limit 0,5
                 ) a

然后,将其用作子查询来限制查询。这是一个SqlFiddle演示这个(http://sqlfiddle.com/#!9/44430d/4/0)。

select t1.id
  from emp t1
  join images t2 ON t1.id = t2.id
 where t1.id IN (
          SELECT DISTINCT id
            FROM (
                   select t1.id
                     from emp t1
                     join images t2 ON t1.id = t2.id
                    order by t1.id
                    limit 0,5
                 ) a
       )
 order by t1.id

当然,此查询可能会产生比LIMIT更多的行:它会根据需要使用额外图像扩充其结果集。 SqlFiddle示例产生六行而不是五行(http://sqlfiddle.com/#!9/44430d/4/0