我有一个data
类型的列,json
其中包含这样的 JSON 文档:
{
"name": "foo",
"tags": ["foo", "bar"]
}
Run Code Online (Sandbox Code Playgroud)
我想将嵌套tags
数组转换为连接字符串 ( 'foo, bar'
)。array_to_string()
从理论上讲,使用该函数很容易做到这一点。但是,此功能不接受json
输入。所以我想知道如何将这个 JSON 数组变成 Postgres 数组(类型text[]
)?
我有这个 SQL:
CREATE TABLE test(id SERIAL PRIMARY KEY, data JSONB);
INSERT INTO test(data) VALUES
('{"parent":null,"children":[2,3]}'),
('{"parent":1, "children":[4,5]}'),
('{"parent":1, "children":[]}'),
('{"parent":2, "children":[]}'),
('{"parent":2, "children":[]}');
Run Code Online (Sandbox Code Playgroud)
那会给:
id | data
----+--------------------------------------
1 | {"parent": null, "children": [2, 3]}
2 | {"parent": 1, "children": [4, 5]}
3 | {"parent": 1, "children": []}
4 | {"parent": 2, "children": []}
5 | {"parent": 2, "children": []}
Run Code Online (Sandbox Code Playgroud)
当进行正常的一对多时,它会显示如下内容:
SELECT *
FROM test x1
LEFT JOIN test x2
ON x1.id = (x2.data->>'parent')::INT;
id | data | id | …
Run Code Online (Sandbox Code Playgroud) 我有一个使用 JSON 类型的列。我想执行查询以选择 JSON 字符串中特定字段的所有不同记录:即给定这三个文档
{
id: 1,
s: "foo"
},
{
id:2,
s: "bar"
},
{
id:3,
s: "foo"
},
Run Code Online (Sandbox Code Playgroud)
查询必须检查“s”键是否有不同的值,并返回 ID 为 1 和 2 的文档。