【问题标题】:aggregate returning * as array聚合返回 * 作为数组
【发布时间】:2018-10-02 10:38:01
【问题描述】:

我有一个简单的查询:

delete from public.field
where template_id = 1
returning *

这很好用,但当然它会单独返回每一行,而我需要它来返回编辑过的每一行的数组。

我在另一个查询中使用它,这就是我想格式化删除查询的输出的方式:

SELECT array_to_json(array_agg(to_json(fields))) as fields

我无法解决的是如何将两者结合起来而不会出现语法错误。

这是在 PostgreSQL 9.6 中。

【问题讨论】:

    标签: sql arrays json postgresql


    【解决方案1】:

    这是你想要的吗?

    with d as (
          delete from public.field
          where template_id = 1
          returning *
         )
    select array_to_json(array_agg(to_json(d)))
    from d;
    

    这会将delete 的结果作为 CTE 返回。然后使用 CTE 生成所需的 JSON 表示。

    【讨论】:

    • 我会使用json_agg 而不是array_to_json(array_agg())。有区别吗?查询计划看起来相同 dbfiddle.uk/…
    • 我没有理由,我仍在学习 SQL,只是选择了第一个有效的方法。我会换这个,谢谢!
    • @S-Man 。 . .这是OP的问题。我只是保持与问题相同的逻辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    • 1970-01-01
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 2019-04-28
    相关资源
    最近更新 更多