我想选择一些具有特定过滤器的行,但如果我没有获得,则不要限制,至少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>
答案 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