【问题标题】:SQL query for pagination with multiple columns; understand OR operator多列分页的 SQL 查询;了解 OR 运算符
【发布时间】:2020-06-11 11:46:48
【问题描述】:

我正在使用生成以下 Postgresql 查询的工具:

SELECT
    "id",
    "score"
FROM
    "players"
WHERE
    "score" > '11266' OR ( "score" = '11266' AND "id" > '4482' )
ORDER BY
    "score" ASC,
    "id" ASC
    LIMIT 3

我需要了解为什么OR 运算符?

我的 players 表可以有很多行,score 相同,id 不同。

当多行具有相同的score 值时,是否需要OR

【问题讨论】:

  • 为该工具点赞,以正确的方式进行分页!

标签: sql database postgresql sorting


【解决方案1】:

OR 的目的 - 正如您所怀疑的那样 - 是处理分数存在平局的情况。这个想法是通过包含id 来进行稳定排序,所以这会得到所有之后 (score, id)

据推测,scoreid 使用的值是最后看到的值(可能在前一页,但这是推测)。

“稳定”排序是每次应用时都以相同顺序返回行的排序。因为 SQL 表代表 无序 集合,所以关系意味着 不稳定 排序。包含id 使其稳定(假设id 是唯一的。

Postgres 实际上支持更简单的语法:

where (score, id) > (11266, 4482)

请注意,我还删除了单引号。这些值看起来像数字,因此应将它们视为数字而不是字符串。

【讨论】:

  • 很抱歉打扰您。如果where 子句改为:WHERE "score" < '11266' OR ( "score" = '11266' AND "id" > '4482' )。有没有更简单的语法?
  • @FredHors 。 . .元组语法对我来说似乎更简单。
猜你喜欢
  • 2012-12-07
  • 2019-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-26
  • 1970-01-01
相关资源
最近更新 更多