【问题标题】:Postgres RETURNING clause with join带有连接的 Postgres RETURNING 子句
【发布时间】:2017-05-03 07:52:59
【问题描述】:

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

【问题讨论】:

  • sub中的行由一列组成,在mytable中。正如所写,这个问题过于简单了。

标签: sql postgresql join sql-update


【解决方案1】:

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
;    

【讨论】:

  • 你能看看我的问题stackoverflow.com/questions/41387603/…吗?它与您在此处列出的 SQL 语句大致相同,但我无法让它遵循外部 RETURNING 查询中的 ORDER BY mycolumn。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-18
  • 1970-01-01
相关资源
最近更新 更多