Postgres的RETURNING与条款加入,为了
问题描述:
我有了这个查询,更新一些行和RETURNING
子句中返回更新行。但是,即使我在内部查询中指定了ORDER BY mycolumn
,但由RETURNING
返回的行未被排序。Postgres的RETURNING与条款加入,为了
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
之后,但我在这两种情况下得到一个错误。我怎样才能让它以所需的顺序返回行?
(A类似的问题得到回答在Update Returning Order by in postgresql,但不包括连接,只有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
我得到一个错误'ORDER BY “mycolumn” 是ambiguous' 。如果我拿出最后一个'ORDER BY',就没有错误。所以内部的'ORDER BY'是好的,它是外部的错误。我想这是因为连接中的两个表都有一个“mycolumn”。我怎样才能让订单工作呢? – user779159
而不是退回*,写下你需要的列。 – cybernetic87
例如:返回j.id,sub.mycolumn,请记住,您必须使用特定的别名 – cybernetic87