在子查询mysql中限制

时间:2010-06-01 16:13:15

标签: sql mysql

由于mysql 5在子查询中不支持limit关键字,因此我在mysql中绑定了一个替代限制子查询:

SET @i = 0;

SELECT BuildID, COUNT(TestCase) 
  from results R 
 where R.BuildID IN (select B.BuildID 
                       from build B 
                      where ( @i := ( @i +1 ) ) <= 25 
                        and B.BuildID NOT LIKE 'Tx%' 
                   order by B.buildid desc) 
group by R.BuildID 
order by R.id desc;

但我只是得到一个结果集。想不通为什么?如果我单独执行子查询,我得到6个BuildID的

2 个答案:

答案 0 :(得分:0)

由于分组group by R.BuildID。 如果所有结果都具有相同的BuildID,则它们都将是一行。

或者,如果结果表只有一行具有子查询中也存在的BuildID

答案 1 :(得分:0)

从我看到的,@ i永远不会在子查询中重置。假设你有25条BuildID == 1的记录。在这种情况下@i == 25,当BuildID变为2时,(@ i = @ i + 1)的计算结果为26,所以你的子查询总是为所有BuildID返回NULL除了第一个(或少数第一个BuildID,如果每个BuildID少于25个记录)。

我说你需要改变你的查询并摆脱子查询。我不确定我是否理解你想要什么,但我相信你想从结果表中得到BuildID,表build中的条目不超过25个。我想B.PK_COLUMN是build表中的主键。

SELECT R.BuildID, COUNT(R.TestCase),Count(B.PK_COLUMN) as cnt2 
from results R
INNER JOIN from build B ON (B.BuildID = R.BuildID AND B.BuildID NOT LIKE 'Tx%')
GROUP BY R.BuildID
HAVING cnt2 <25;