带有连接和顺序的 Postgres RETURNING 子句

Postgres RETURNING clause with join and order

我有这个查询更新了一些行,return更新了 RETURNING 子句中的行。但是,即使我在内部查询中指定了 ORDER BY mycolumn,由 RETURNING 编辑的行 return 仍未排序。

UPDATE mytable SET status = 'A'
FROM
  (
    SELECT id FROM mytable
    WHERE status = 'B'
    ORDER BY mycolumn
    LIMIT 100
    FOR UPDATE
  ) sub
  JOIN jointable j ON j.id = sub.id
WHERE mytable.id = sub.id
RETURNING *

我尝试在外部查询中放置一个 ORDER BY,比如在 JOIN 之后或 WHERE 之后,但在这两种情况下我都得到了错误。我怎样才能使行 return 成为所需的顺序?

(在 Update Returning Order by in postgresql 中回答了类似的问题,但不包括 JOIN,仅包括 ORDER。)

使用 CTE:

WITH updated as(
    UPDATE mytable SET status = 'A'
FROM
  (
    SELECT id FROM mytable
    WHERE status = 'B'
    ORDER BY mycolumn
    LIMIT 100
    FOR UPDATE
  ) sub
  JOIN jointable j ON j.id = sub.id
WHERE mytable.id = sub.id
RETURNING *
)
select *
from updated
ORDER BY mycolumn