使用WHERE而不是LIMIT限制

时间:2011-08-31 16:33:51

标签: mysql where

我想选择一些具有特定过滤器的行,但如果我没有获得,则不要限制,至少40行。

这是一个伪示例:

SELECT * FROM `table`
WHERE
   SUM(1) < 40 OR
   `age` > 18

它类似于LIMIT,但是LIMIT会考虑使用WHERE过滤器。如果我没有至少40行(但接受第一行),我想忽略过滤器。

我是怎么做到的?

编辑:很多人都怀疑我真正想要的是什么。

这是一个例子:

ID AGE
1  10
2  20
3  30
4  10
5  20
6  30
7  10

我想获得前2行EVER。并且只有在至少两行之后,才能获得与给定条件匹配的新行(WHERE)。

例如:我想要前两行更多年龄为30的行。结果相当于:

ID AGE
1  10 <first>
2  20 <second>
3  30 <conditional>
6  30 <conditional>

1 个答案:

答案 0 :(得分:1)

您可以使用增量变量@rownum来模拟相同的功能。但是,这比limit效率低得多,因为服务器将过滤掉的行带入内存并连续执行@rownum:=@rownum+1计算。

SELECT @rownum:=@rownum+1, t.*
FROM `table` t, (SELECT @rownum:=0) r
WHERE
   @rownum <= 40 OR
   `age` > 18