【问题标题】:How to write a SQL query with dynamic LIMIT如何使用动态 LIMIT 编写 SQL 查询
【发布时间】:2011-05-09 08:19:42
【问题描述】:

SELECT * FROM user LIMIT (SELECT group_limit FROM groups WHERE groupid = 7471);

【问题讨论】:

    标签: mysql sql limit


    【解决方案1】:

    这是来自MySQL Database Knowledge base

    LIMIT 子句可用于限制 SELECT 语句返回的行数。 LIMIT 接受一个或两个数字参数,它们都必须是非负整数常量(使用准备好的语句时除外)。

    要使您的查询正常工作,您需要将其编写为准备好的语句,然后执行。

    SET @a = (SELECT group_limit FROM groups WHERE groupid = 7471);
    
    PREPARE STMT FROM 'SELECT * FROM user LIMIT ?';
    EXECUTE STMT USING @a;

    【讨论】:

    • 这在mysql查询浏览器上不起作用,没有返回结果,当我把它放在BIRT查询中时,它返回错误。估计是认不出来了。因为当我在 toad 中输入它时,它可以工作。如何在 mysql 中完成这项工作?
    • 您使用的是哪个 MySQL 数据库版本?
    【解决方案2】:

    MySQL 8.0.2开始,支持ROW_NUMBER()窗口功能。在子查询的帮助下,这意味着您可以做一些接近问题要求的事情:

    SELECT * FROM (
      SELECT ROW_NUMBER() OVER(PARTITION BY 1) rownum, u.* FROM user u
    ) t 
    WHERE t.rownum <= (SELECT group_limit FROM groups WHERE groupid = 7471);
    

    MariaDB10.2.0 以来也支持此功能。

    【讨论】:

      猜你喜欢
      • 2021-06-16
      • 2018-11-14
      • 2015-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-20
      • 1970-01-01
      • 2019-08-08
      相关资源
      最近更新 更多