SQL查询 - 基于子查询的限制

时间:2013-06-12 20:38:37

标签: mysql limit

我正在尝试获取其标志字段等于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;

但这不起作用。有什么建议吗?

由于

1 个答案:

答案 0 :(得分:1)

SELECT语法:

所述
  

LIMIT子句可用于约束SELECT语句返回的行数。 LIMIT需要一个或两个数字参数,它们都必须是非负整数常量,但有以下例外:

     
      
  • 在准备好的陈述中,可以使用LIMIT占位符标记指定?个参数。

  •   
  • 在存储的程序中,可以使用整数值例程参数或局部变量指定LIMIT个参数。

  •   

因此,LIMIT参数永远不会是user-defined variables。如上所述,您的选项是使用:

  1. 准备好的陈述

    PREPARE stmt FROM '
      select * from my_table where flagged=1 order by 21_day_probability limit ?
    ';
    EXECUTE stmt USING @v1;
    DEALLOCATE PREPARE stmt;
    
  2. 存储程序中的参数/局部变量:

    CREATE PROCEDURE foo(_l INT)
      select * from my_table where flagged=1 order by 21_day_probability limit _l
    ;
    CALL foo(@v1);