【问题标题】:How can I get join results as JSON in a PostgreSQL query?如何在 PostgreSQL 查询中以 JSON 形式获取连接结果?
【发布时间】:2020-10-03 19:19:06
【问题描述】:

下面的查询几乎可以工作:它返回 3 行,其中一个应该填充 first_nation(其他两个应该为 NULL)。但是对于first_nation,他们都得到了相同的数据。我需要的是来自外部的person.id 成为内部查询中 WHERE 的一部分,但我认为这是不可行的。任何帮助将不胜感激。

或者另一种方式,我希望 JOIN 的结果是 JSON,而不是显示为附加列。

SELECT person.id,
  (
    SELECT row_to_json(x)
    FROM (
      SELECT ref_first_nations_gov.id
      FROM ref_first_nations_gov JOIN person ON person.first_nation_id = ref_first_nations_gov.id
      WHERE person.application_id = 1 AND person.archived = false
    ) x
  ) AS first_nation
FROM person
WHERE application_id = 1 AND archived = false;

编辑:示例数据

SELECT id, application_id, first_nation_id FROM person WHERE application_id = 1;
 id | application_id | first_nation_id 
----+----------------+-----------------
  4 |              1 |                
  1 |              1 |                
  2 |              1 |                
  3 |              1 |               1

上面的查询给了我什么:

 id | first_nation 
----+--------------
  4 | {"id":1}
  1 | {"id":1}
  3 | {"id":1}

我想要什么

 id | first_nation 
----+--------------
  4 | 
  1 | 
  3 | {"id":1}

【问题讨论】:

  • 请以表格文本的形式提供样本数据、当前和期望的结果。你的解释不是很清楚。

标签: sql postgresql pg


【解决方案1】:

尽管我现在不知道如何测试它,但我认为您不需要子查询。

试试这样的。

SELECT p.id, row_to_json(r.id) FROM person p 
  FULL OUTER JOIN ref_first_nations_gov r on r.id = p.first_nation_id
  WHERE p.application_id = 1 AND p.archived = false;

【讨论】:

  • 谢谢。只需将row_to_json 更改为to_json 即可工作。我想太多了。
猜你喜欢
  • 1970-01-01
  • 2023-01-22
  • 1970-01-01
  • 2013-06-24
  • 1970-01-01
  • 1970-01-01
  • 2013-01-06
  • 1970-01-01
  • 2014-06-26
相关资源
最近更新 更多