我正在尝试获取标志字段等于 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;
但这不起作用。有什么建议么?
谢谢
如SELECT
语法中所述:
该
LIMIT
子句可用于限制SELECT
语句返回的行数。LIMIT
接受一个或两个数字参数,它们都必须是非负整数常量,但以下情况除外:
在准备好的语句中,
LIMIT
可以使用?
占位符标记指定参数。在存储的程序中,
LIMIT
可以使用整数值的例程参数或局部变量来指定参数。
因此LIMIT
参数永远不能是用户定义的变量。如上所述,您的选择是使用以下任一选项:
准备好的陈述
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);