在更新与排序无关的列之后对行进行排序更改

时间:2013-04-08 20:31:04

标签: postgresql

像这样生成ORM:

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 ...

之后的行

1 个答案:

答案 0 :(得分:1)

如果LIMIT范围内存在多个匹配结果,则

ORDER BY无法保证将返回哪些行。因此,如果您有超过10行具有相同的date,或者如果大多数具有不同的日期但是第9行,第10行,第11行和第12行具有相同的date,那么您不是保证获得一致的结果,将在第9和第10个时段返回。 PostgreSQL会根据自己的判断选择这些 - 当记录更新时,这通常会改变。

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