带有连接和顺序的 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
我有这个查询更新了一些行,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