多列分页的 SQL 查询;了解 OR 运算符

Fre*_*ors 2 sql database sorting postgresql

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

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

我需要了解为什么OR运营商?

我的玩家表可以有很多行相同score但不相同id

OR当多行具有相同的score值时是否需要这样做?

Gor*_*off 7

OR正如您所怀疑的那样,目的是处理分数存在联系的情况。这个想法是通过包含 来进行稳定的排序id,因此这将 (score, id).

据推测,用于score和的值id是最后看到的值(可能在上一页,但这是推测)。

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

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

where (score, id) > (11266, 4482)
Run Code Online (Sandbox Code Playgroud)

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