PostgreSQL 中的更新顺序

Ces*_*ega 1 mysql sql postgresql sql-update

我有一个mysql命令:

 update table_demo SET flag= 1 where flag=0 ORDER BY id ASC LIMIT 10
Run Code Online (Sandbox Code Playgroud)

并且需要在 Postgres 中使用相同的命令,我收到此错误:

错误:语法错误位于或附近'ORDER'

Erw*_*ter 5

要更新前 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;
Run Code Online (Sandbox Code Playgroud)

FOR UPDATE(行级锁)仅用于防止并发写访问。如果您的事务是唯一写入该表的事务,则不需要它。

如果定义了 flag NOT NULL,则可以使用WHERE flag <> 0.

相关答案以及更多解释和链接: