带加入的Postgres RETURNING子句

时间:2016-12-17 20:18:22

标签: sql postgresql join sql-update

在下面的SQL中,如何将RETURNING子句连接到其他内容并返回连接的行?这里只返回已更新的mytable行,但我希望将该行连接到另一个表中的某些内容。

UPDATE mytable
SET    status = 'A' 
FROM  (
   SELECT myid
   FROM   mytable
   WHERE  status = 'B'
   ORDER BY mycolumn
   LIMIT  100
   FOR   UPDATE
   ) sub
WHERE  mytable.myid = sub.myid
RETURNING *;

我可以从我的客户端应用程序执行另一个查询,但是我想知道是否有办法在Postgres中执行此操作,而不必单独向数据库进行往返。

1 个答案:

答案 0 :(得分:9)

FROM条款中的任何内容都是RETURNING的公平游戏:

UPDATE mytable
SET status = 'A'
FROM
  (
    SELECT
      myid
    FROM mytable
    WHERE status = 'B'
    ORDER BY mycolumn
    LIMIT 100
    FOR UPDATE
  ) sub
  JOIN jointable j ON j.id = sub.myid
WHERE mytable.myid = sub.myid
RETURNING mytable.mycolumn, j.othercolumn
;    
相关问题