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 
+0

我得到一个错误'ORDER BY “mycolumn” 是ambiguous' 。如果我拿出最后一个'ORDER BY',就没有错误。所以内部的'ORDER BY'是好的,它是外部的错误。我想这是因为连接中的两个表都有一个“mycolumn”。我怎样才能让订单工作呢? – user779159

+0

而不是退回*,写下你需要的列。 – cybernetic87

+1

例如:返回j.id,sub.mycolumn,请记住,您必须使用特定的别名 – cybernetic87