我正在尝试获取其标志字段等于1的条目的上半部分。我尝试使用变量来保存限制值,如
set @v1:=(select ceil(count(*)/2) as top_half from my_table
where flagged=1);
select * from my_table where flagged=1 order by 21_day_probability limit @v1;
但这不起作用。有什么建议吗?
由于
答案 0 :(得分:1)
如SELECT
语法:
LIMIT
子句可用于约束SELECT
语句返回的行数。LIMIT
需要一个或两个数字参数,它们都必须是非负整数常量,但有以下例外:
在准备好的陈述中,可以使用
LIMIT
占位符标记指定?
个参数。在存储的程序中,可以使用整数值例程参数或局部变量指定
LIMIT
个参数。
因此,LIMIT
参数永远不会是user-defined variables。如上所述,您的选项是使用:
准备好的陈述
PREPARE stmt FROM '
select * from my_table where flagged=1 order by 21_day_probability limit ?
';
EXECUTE stmt USING @v1;
DEALLOCATE PREPARE stmt;
存储程序中的参数/局部变量:
CREATE PROCEDURE foo(_l INT)
select * from my_table where flagged=1 order by 21_day_probability limit _l
;
CALL foo(@v1);