mysql 从特定行获取行

标签 mysql sql database

我有一张这样的 table

+------------+
| Id| data   |
|============|
| n | some_n |
| a | some_a |
| f | some_f |
| b | some_b |
+------------+

如果我只知道上一个 ID 行,有没有办法获取下一个“N”行?例如,我知道第二行 (a) 的 id,并且我想从那里获取接下来的 2 行。查询将返回 {(f, some_f), (b, some_b)}

查询看起来像这样:

SELECT * FROM table WHERE [something] LIMIT start,numRows;

问题是...我如何知道起始值?我在 where 子句中放入了什么?

最佳答案

SELECT t.* FROM table t WHERE t.Id > 'a' ORDER BY t.Id LIMIT 2;

表中的行没有隐含的顺序;因此,如果没有 ORDER BY 子句,数据库可以自由地以任意顺序返回行。如果没有 ORDER BY,则无法保证后续查询不会返回之前返回的行。

因此,您知道“第二行”的 Id 值为 'a',这意味着已应用了某种排序。我的示例查询假设行按 Id 列排序。

通过指定的顺序,查询可以使用谓词(WHERE 子句中的条件)返回“接下来的 N”行,该谓词指定仅返回最后检索的值“后面”的行。 LIMIT 子句在行排序后应用,这样我们就可以保证获得“接下来的 N 行”(按有序顺序)。

更一般的形式,如果行按唯一键以外的其他方式排序,则需要稍微复杂的谓词来处理相等条件,其中要检索的下一行具有与上次检索的值相匹配的值...

SELECT t.*
  FROM table t
 WHERE ( t.col = last_col_value_retrieved AND t.id > last_id_value_retrieved )
    OR ( t.col > last_col_value_retrieved )
 ORDER BY t.col, t.id
 LIMIT 50

关于mysql 从特定行获取行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16955031/

相关文章:

java - 如何将对象更改为字符串(java spring boot)

mysql - 如何在已排序结果的编号分页中查找某些内容从哪一页开始?

sql - 在oracle中查找两个大表之间的差异

java - 使用 sql 数据库数据填充 jtable 时出现 nullpointerException

mysql - AWS 极光 : The MySQL server is running with the --read-only option so it cannot execute this statement

mysql - hibernate 5 maven和mysql没有找到适合jdbc的驱动程序:mysql://127. 0.0.1:3306/projeto

python - 从 excel 到 mysql 的格式字符串参数不足

mysql - 在子查询中使用外部查询值 - 出现错误 : "no such column .... "

sql - 获取Django模型在.save()上具有(或将调用)的SQL

MySql数据库插入数据