【问题标题】:How to use LIMIT to always include first row如何使用 LIMIT 始终包含第一行
【发布时间】:2013-02-01 13:54:30
【问题描述】:

我想知道是否有办法使用LIMIT 运算符来始终在结果集中包含第一行。我的意思是不管指定的任何范围。例如:

SELECT * FROM `table` LIMIT 5, 10

应该返回第一行和第 6 行到第 15 行,或者:

SELECT * FROM `table` LIMIT 200, 30

应该返回第一行和第 201 行到第 231 行。有没有办法做到这一点?

编辑第一行 id 始终为 0

【问题讨论】:

  • 其实 LIMIT 5, 10 返回第 6-15 行,而不是 5-15...
  • @Pete:对,只是一个错误。
  • 你对结果集有什么了解吗?第一个元素是否总是具有最低的 ID 或类似的东西?
  • 小心!正式地说,SELECT 语句结果集中的行顺序是unpredictable,除非您使用 ORDER BY 子句指定它。也就是说,MySQL 服务器决定哪一行是第一行。现在它的决定对你有利。以后它可以改变主意。
  • @Scott:是的,它的 id 总是 0

标签: mysql select limit


【解决方案1】:

我没有看到其他方式:

(SELECT * from table LIMIT 1)
UNION
(SELECT * FROM table LIMIT 5, 10)

或正如 Scott 指出的那样,带有新信息;)

SELECT * from table Where id = 0
UNION
(SELECT * FROM table LIMIT 5, 10)

别忘了brackets

要将 ORDER BY 或 LIMIT 应用于单个 SELECT,请放置子句 在括住 SELECT 的括号内:

(SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10) UNION (SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10);

【讨论】:

  • 繁重和大查询怎么样?
  • 如前所述,看不到其他方式。您可能会为特定查询找到另一种订购方式,也许...
  • 根据用户的评论,您可以通过将第一部分更改为“SELECT * FROM table WHERE id=0”来稍微加快此查询。
  • @Strawberry well en.wikipedia.org/wiki/Bracket :用法似乎存在;)但我应该使用“圆括号”更清楚。
【解决方案2】:

您可以使用 UNION 连接 2 个选择:(SELECT * FROM table LIMIT 1) UNION (SELECT * FROM table LIMIT 5, 10)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-04
    • 2011-08-20
    • 2019-07-03
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多