【问题标题】:How can I select rows by range? [duplicate]如何按范围选择行? [复制]
【发布时间】:2012-12-28 11:27:52
【问题描述】:

可能重复:
Select statement in SQLite recognizing row number

例如,SELECT * FROM table WHERE [row] BETWEEN x AND y

如何做到这一点?我做了一些阅读,但没有发现任何特别正确的内容。

想象一个列表,您希望结果按 X 数量的结果分页,因此对于第 10 页,您需要第 10 * X 到 10 * X + X 行的结果。而不是一次性显示所有结果

【问题讨论】:

  • 你不是说专栏吗?如果您使用 [column] 更改 [row],您将收到一个结果集,其中包含在 X 和 Y 之间的特定列中具有值的所有行。另请参阅:w3schools.com/sql/sql_between.asp
  • 我猜他想要“给我第 20 - 50 行”之类的东西
  • 抱歉,如果不清楚。想象一个列表,您希望结果按 X 数量的结果分页,因此对于第 10 页,您需要第 10 * X 到 10 * X + X 行的结果。而不是一次性显示所有结果。

标签: sql sqlite


【解决方案1】:

对于 mysql 你有限制,你可以触发查询:

SELECT * FROM table limit 100` -- get 1st 100 records
SELECT * FROM table limit 100, 200` -- get 200 records beginning with row 101

对于 Oracle,您可以使用 rownum

查看limithere的mysql选择语法和用法。

对于 SQLite,您有 limit, offset。我没有使用过 SQLite,但我在 SQLite Documentation 上检查了它。检查 SQLite here 的示例。

【讨论】:

  • 这很危险。我认为这个问题问的是列范围而不是行数范围
【解决方案2】:

根据您的说明,您正在寻找限制:

SELECT * FROM `table` LIMIT 0, 10 

这将显示数据库中的前 10 个结果。

SELECT * FROM `table` LIMIT 5, 5 .

将显示 5-9 (5,6,7,8,9)

语法遵循模式:

SELECT * FROM `table` LIMIT [row to start at], [how many to include] .

选择在两个值之间的行的SQL是:

SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2

见:http://www.w3schools.com/sql/sql_between.asp

如果要继续行号,可以使用rownum:

SELECT column_name(s)
FROM table_name
WHERE rownum 
BETWEEN x AND y

但是我们需要知道您使用的数据库引擎作为 rownum 是不同的。

【讨论】:

【解决方案3】:

你可以使用rownum

SELECT * FROM table WHERE rownum > 10 and rownum <= 20

【讨论】:

  • @paranoid-android 想要 SQLite 的东西。你朝着正确的方向前进,所以我找到了应该对他有用的stackoverflow.com/questions/12233091/… 答案。
  • @PhiLho 有人刚刚添加了 SQLite 标签 :)
【解决方案4】:

在条件之间使用

SELECT *
FROM TEST
WHERE COLUMN_NAME BETWEEN x AND y ;

或使用 Just 运算符,

SELECT *
FROM TEST
WHERE COLUMN_NAME >= x AND COLUMN_NAME   <= y;

【讨论】:

    【解决方案5】:

    您是否尝试过自己的代码?
    这应该有效:

    SELECT * FROM people WHERE age BETWEEN x AND y
    

    【讨论】:

      【解决方案6】:

      使用 LIMIT 子句:

      /* rows x- y numbers */
      SELECT * FROM tbl LIMIT x,y;
      

      参考:http://dev.mysql.com/doc/refman/5.0/en/select.html

      【讨论】:

        【解决方案7】:

        假设id是表的主键:

        SELECT * FROM table WHERE id BETWEEN 10 AND 50
        

        前 20 个结果

        SELECT * FROM table order by id limit 20;
        

        【讨论】:

        • id 是,但是如果记录被删除了怎么办?不能保证从 1 到 20 的 id 会给你 20 个结果。
        • @paranoid :我已经为您的查询编辑了我的答案......谢谢
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-26
        • 2013-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-27
        • 1970-01-01
        相关资源
        最近更新 更多