【问题标题】:Postgres RETURNING clause with join and order带有连接和顺序的 Postgres RETURNING 子句
【发布时间】:2016-12-29 21:43:17
【问题描述】:

我有这个查询更新一些行并在RETURNING 子句中返回更新的行。然而,即使我在内部查询中指定了ORDER BY mycolumnRETURNING 返回的行也没有排序。

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 之后,但在这两种情况下我都会遇到错误。如何让它以所需的顺序返回行?

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

【问题讨论】:

    标签: sql postgresql join sql-update sql-order-by


    【解决方案1】:

    使用 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" is ambiguous。如果我取出最后一个ORDER BY,则没有错误。所以内部的ORDER BY 很好,是外部的给出了错误。我想这是因为连接中的两个表都有mycolumn。那我怎样才能让订单生效呢?
    • 写下您需要的列,而不是 RETURNING *。
    • 例如:RETURNING j.id, sub.mycolumn,记住一定要使用特定的别名
    猜你喜欢
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 2020-10-09
    相关资源
    最近更新 更多