我正在建立以下查询:
SELECT taskid
FROM tasks, (SELECT @var_sum := 0) a
WHERE (@var_sum := @var_sum + taskid) < 10
结果:
taskid
1
2
3
现在,它返回的所有行的总和小于10,我想在结果中多包含一行(尽管10可以是任何值,这只是一个示例值)
因此,期望的结果:
taskid
1
2
3
4
最佳答案
我会这样做:
SELECT t.taskid
FROM tasks t
CROSS
JOIN (SELECT @var_sum := 0) a
WHERE IF(@var_sum<10, @var_sum := @var_sum+t.taskid, @var_sum := NULL) IS NOT NULL
这是在检查
@var_sum
的当前值是否小于10(或小于等于10,或小于等于等于2。如果是,则将taskid值添加到@var_num中,并将该行包含在结果集中)但是,当@var_sum的当前值不满足条件时,我们为其分配一个NULL,并且不包含该行。注意不能保证从
tasks
表返回的行顺序。 MySQL可以以任何顺序返回行;在您的测试中看起来可能是确定性的,但这可能是因为MySQL针对相同的数据选择了相同的访问计划。