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
.
.
.

这是我的实际问题:
我必须添加limit 0100这样的限制功能。以我的极限0,3
所以我的期望是,如果有任何id与查询一起出现,那么所有id都应该出现。

最佳答案

我想您的要求是选择一组ID值,在结果集中产生大约100行。
LIMIT没有意义;您只是选择结果集的不可预测子集。所以,我猜你想ORDER BY
首先,您需要确定您的集合中有哪些ORDER BY ID值。这相对简单。(我正在使用ID)。

          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 0,5更多的行:它会根据需要用额外的图像来扩充其结果集。SqlFiddle示例生成六行而不是五行(http://sqlfiddle.com/#!9/44430d/4/0

关于mysql - 联接查询与限制结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37273375/

10-16 19:12
查看更多