【问题标题】:SQL select certain number of rowsSQL选择一定数量的行
【发布时间】:2012-08-28 15:04:26
【问题描述】:

您好,我需要一条 SQL 查询语句,让我从“开始”到“结束”行。

例如:

一个包含许多项目的网站,其中第 1 页仅选择项目 1-10,第 2 页有 11-20 等等。

我知道如何使用 Microsoft SQL Server 和 MySQL 执行此操作,但我需要一个独立于平台的实现。 :/

我有一个 ID 增量行,但是当我通过

选择时,删除中间会弄乱结果
WHERE ID > number AND ID < othernumber

当然

如果不将整个数据库提取到 ResultSet,这是否可行?

【问题讨论】:

  • 欢迎来到 SO。请提供您的架构、示例代码、您尝试过的内容以及圣代冰淇淋。
  • 你不能写独立于平台的sql语句。
  • @thavan 你可以编写标准的 SQL,它应该是相当适应的。
  • 针对这个臭名昭著的问题的所有“平台无关”解决方案都存在严重的性能问题。这就是为什么 ANSI/ISO SQL 专门为其添加了语法,但并非所有 SQL 平台都实现了它们。
  • @thavan:您绝对可以编写独立于平台的 SQL 语句,但它们大多数时候都不是很好。 (你不能做的是编写独立于平台的SQL Procedures

标签: sql range rows database-agnostic


【解决方案1】:

我认为您最安全的选择是使用 BETWEEN 运算符。我相信它适用于 Oracle/MySQL/MSSQL。

WHERE ID BETWEEN number AND othernumber

【讨论】:

  • 我想那将是最安全的,我只是想在前 100 个 ID 消失的情况下,我将不得不进一步检查,直到有东西可以获取。仍然比将整个数据库选择到结果集要好,谢谢。 :)
  • @RayStanz 你总能找到MIN()MAX() 并使用BETWEEN (WHERE ID BETWEEN (SELECT MIN(ID) + 100 FROM ...)
【解决方案2】:

关于你的评论“我只是想在前 100 个 ID 消失的情况下,我必须进一步检查,直到有东西要获取”,你可能想考虑 NOT 实际上曾经删除数据库中的东西,但要在表中添加“活动”之类的标志或类似的标志,这样您就可以避免像现在试图避免的情况那样的情况。另一种方法是您现在所在的位置,必须在过滤器中找到最大和最小行

【讨论】:

    猜你喜欢
    • 2017-07-05
    • 2014-07-10
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    • 2018-01-07
    相关资源
    最近更新 更多