【问题标题】:Can use a subquery to assign LIMIT value in a MySql query?可以使用子查询在 MySql 查询中分配 LIMIT 值吗?
【发布时间】:2021-04-01 11:54:12
【问题描述】:

我需要在没有顺序的情况下提取表的最后一行。 我试试这个,但不起作用:

SELECT * 
FROM contabilidad.emp001_series
LIMIT (SELECT COUNT(*)-10 AS TOTAL FROM contabilidad.emp001_series)

我需要自然顺序的结果,不能使用 ORDER BY

【问题讨论】:

标签: mysql sql database select limit


【解决方案1】:

没有。不允许子查询。

此外,SQL 表中不存在“自然”顺序。 SQL 表表示无序集合。

最好的办法是进行反向排序并从第 11 行开始:

select s.*
from contabilidad.emp001_series s
order by id desc
limit 999999999 offset 10;

如果你想要一组任意的 id,你也可以使用:

select s.*
from contabilidad.emp001_series s
where id < (select s2.id
            from contabilidad.emp001_series s2
            order by s2.id desc
            limit 1 offset 10
           );

这两个都假设您有一个指定排序的某种列。

【讨论】:

  • 感谢您的快速建议。我要做的是模拟分页并在单个查询中获取表的最后一页。我可以进行先前的查询以了解 COUNT(*),然后将其应用于 SELECT SET @rowsxpage=10; SET @bottom=(SELECT COUNT(*) FROM contabilidad.emp001_series); SET @firstoflastpage=@bottom-@rowsxpage; PREPARE STMT FROM 'SELECT * FROM emp001_series LIMIT ?,?'; EXECUTE STMT USING @firstoflastpage,@bottom;
  • 如果你想模拟分页,那么你需要一个order by
【解决方案2】:

https://dev.mysql.com/doc/refman/8.0/en/select.html 有关于 MySQL 的 SELECT 语句的详细文档,包括它的所有子句。

上面写着:

LIMIT 子句可用于限制返回的行数 通过 SELECT 语句。 LIMIT 接受一个或两个数字参数, 必须都是非负整数常量,这些 例外:

  • 在准备好的语句中,LIMIT 参数可以使用? 占位符标记。

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

表达式,包括子查询,在 LIMIT 子句中没有作为合法参数提及。

一个简单的解决方案是在两个查询中完成您的任务:第一个获取 COUNT(),然后在包含 LIMIT 的第二个查询中将该值用作常量值。

并非每项任务都需要在一条 SQL 语句中完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    相关资源
    最近更新 更多