我有一个mysql命令:
update table_demo SET flag= 1 where flag=0 ORDER BY id ASC LIMIT 10
并且在Postgres中需要相同的命令,我收到此错误:
错误:
附近的语法错误'ORDER'
答案 0 :(得分:2)
要更新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
。
相关答案以及更多解释和链接: