我有一个 mysql 命令:
update table_demo SET flag= 1 where flag=0 ORDER BY id ASC LIMIT 10
并且在 Postgres 中需要相同的命令,我得到这个错误:
ERROR: syntax error at or near
'ORDER'
最佳答案
要更新前 10 行(实际上需要更新):
UPDATE table_demo t
SET flag = 1
FROM (
SELECT table_demo_id -- use your actual PK column(s)
FROM table_demo
WHERE flag IS DISTINCT FROM 1
ORDER BY id
LIMIT 10
FOR UPDATE
) u
WHERE u.table_demo_id = t.table_demo_id;
FOR UPDATE
(行级锁)只需要防止并发写访问。如果您的事务是唯一写入该表的事务,则您不需要它。
如果标志被定义NOT NULL
, 你可以使用 WHERE flag <> 0
.
具有更多解释和链接的相关答案:
关于mysql - PostgreSQL 中的更新顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29291224/