0

有一个 ORM 生成的 SQL,如下所示:

SELECT * FROM "games" WHERE "competition_id" IN
(SELECT "id" FROM "competitions" WHERE "id"  IN (1,2,3))
ORDER BY "date" LIMIT 10

它显示第 1 到 10 行。

然而之后:

UPDATE "games" SET "season_id"=2

同样SELECT返回行,如 1,2,3 ... 11, 12 而不是 1,2,3 ... 9, 10

是的,返回的行仍然是 10,但最后一行总是替换为 10 之后的行......

4

1 回答 1

1

LIMIT如果范围内存在多个匹配结果,则不保证将返回哪些行ORDER BY。因此,如果您有超过 10 行具有相同的date,或者如果大多数具有不同的日期但碰巧第 9、10、11 和 12 行具有相同的date,则不能保证获得将返回的一致结果第 9 和第 10 个插槽。PostgreSQL 将自行决定选择这些 - 当记录更新时这通常会改变。

尝试添加id到 ORDER BY 列表以解决此问题。

于 2013-04-08T20:33:58.070 回答