gpt4 book ai didi

postgresql - 子查询作为 JSON 字段

转载 作者:行者123 更新时间:2023-12-04 10:30:02 25 4
gpt4 key购买 nike

使用假设模式:

CREATE TABLE obj (id INT, name VARCHAR);
CREATE TABLE objprop (obj_id INT, key VARCHAR, value VARCHAR);
INSERT INTO obj VALUES
(1, 'Object 1'),
(2, 'Object 2'),
(3, 'Object 3');
INSERT INTO objprop VALUES
(1, 'created', '2020-02-16'),
(1, 'updated', '2020-02-28'),
(2, 'created', '2020-02-01');

我能否获得一个对象列表(每行一个)和一个表示对象属性的 JSON 字段?

我知道我可以使用 ARRAY()带有子查询的函数来检索值数组,例如:
SELECT id, name, ARRAY(SELECT value FROM objprop where obj_id=id) values FROM obj;

+----+----------+------------------------------+
| id | name | values |
+----+----------+------------------------------+
| 1 | Object 1 | {'2020-02-16', '2020-02-28'} |
| 2 | Object 2 | {'2020-02-01'} |
| 3 | Object 3 | {} |
+----+----------+------------------------------+

但是我可以做一个查询而不是 ARRAY ,它会给我一个 JSON包含子查询的列?我的目标是获得例如:
+---+----------+----------------------------------------------------------------------------------------+
| 1 | Object 1 | [{"key": "created", "value": "2020-02-16"}, {"key": "updated", "value": "2020-02-28"}] |
| 2 | Object 2 | [{"key": "created", "value": "2020-02-01"}] |
| 3 | Object 3 | [] |
+---+----------+----------------------------------------------------------------------------------------+

最佳答案

SELECT 
id,
name,
COALESCE((
SELECT json_agg(json_build_object('key', key, 'value', value))
FROM objprop where obj_id=id
), '[]'::json) vals
FROM
obj;

关于postgresql - 子查询作为 JSON 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60458369/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com