由于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的
答案 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;