【问题标题】:MySQL - Using COUNT and LIMIT functions togetherMySQL - 一起使用 COUNT 和 LIMIT 函数
【发布时间】:2011-11-12 22:01:09
【问题描述】:

我有一个包含 14 个条目的表“实验室”。

查询SELECT COUNT(Labs.sid) FROM Labs LIMIT 0, 18446744073709551615 返回“14”。

但是查询 SELECT COUNT(Labs.sid) FROM Labs LIMIT 1, 18446744073709551615 返回“0”(不是我期望的 13)。实际上,当我设置 LIMIT 行偏移值 2、3、4 等时,仍然返回“0”。

这是为什么?有没有办法只使用mysql来确定指定偏移后的行数?

FWIW 我正在使用 MySQL 5.5.9 和 InnoDB 数据库引擎。

【问题讨论】:

    标签: mysql sql database


    【解决方案1】:

    执行计数后应用限制。

    试试这个:

    SELECT COUNT(sid) FROM
    (
        SELECT sid FROM Labs LIMIT 2, 18446744073709551615
    ) T1
    

    请注意,在没有 ORDER BY 的情况下使用 LIMIT 是个坏主意,因为您不能保证顺序一致,因此理论上每次都可以选择不同的行(如果 sid 可以为 NULL,这很重要) .

    【讨论】:

      【解决方案2】:

      为什么不直接从COUNT(*) 中减去偏移量?

      SELECT COUNT(Labs.sid) - 1 FROM ...
      

      【讨论】:

      • 如果你真的很聪明,你可以检查这是否会给你一个否定的结果,在这种情况下,返回 0 代替。
      • 如果Labs.sid 可以为NULL,这将给出不同的结果。
      猜你喜欢
      • 2021-11-03
      • 1970-01-01
      • 2013-06-05
      • 1970-01-01
      • 2014-08-04
      • 2020-01-20
      • 1970-01-01
      • 1970-01-01
      • 2012-06-19
      相关资源
      最近更新 更多