在下面的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中执行此操作,而不必单独向数据库进行往返。
答案 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
;