如何在 PostgreSQL 查询中获得 JSON 的连接结果?
How can I get join results as JSON in a PostgreSQL query?
下面的查询几乎可以正常工作:它 returns 3 行,其中一行应该 first_nation 已填充(其他两行应该为 NULL)。但他们都获得了 first_nation
的相同数据。我需要的是外部 where 中的 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}
尽管我现在不知道如何测试它,但我认为您不需要子查询。
尝试这样的事情。
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;
下面的查询几乎可以正常工作:它 returns 3 行,其中一行应该 first_nation 已填充(其他两行应该为 NULL)。但他们都获得了 first_nation
的相同数据。我需要的是外部 where 中的 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}
尽管我现在不知道如何测试它,但我认为您不需要子查询。
尝试这样的事情。
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;