[英]Query json_array in where clauses by key and value
我有一個 select 查詢,女巫返回給我一個 array_to_json object。 我想根據具體的鍵和值過濾 select 的結果。
這是我的實際查詢:
select jsonarray
from (
SELECT body.id_user,
array_to_json(array_agg(row_to_json(body))) as jsonarray
FROM (
SELECT id_user, name, value
FROM table_1
group by id_user, name, value
) body
group by body.id_user
) as test;
它返回很多這樣的行:
[{"id_user": 1489, "name": "name 1", "value": "value aaaaaa"}, {"id_user": 1489, "name": "name 2", "value": "value babababab"}]
[{ "id_user": 1490, "name": "name 12", "value": "value aaaaaa" }, { "id_user": 1490, "name": "name 2", "value": "value babababab" }]
[ { "id_user": 1491, "name": "name 13", "value": "value aaaaaa" }, { "id_user": 1491, "name": "name 23", "value": "value uouououo" }]
好吧,我只想要在 json 中包含字段“name”:“name 2”,“value”:“value babababab”的行......我試過了
select jsonarray->'name'
from (
....
) as test
where jsonarray->>'name'::text = 'name 2';
但它什么也不返回。 還有其他方法可以查詢嗎?
您可以在聚合期間檢查name 2
是否存在:
SELECT jsonb_agg(to_jsonb(body)) as jsonarray
FROM (
SELECT DISTINCT id_user, name, value
FROM table_1
) body
group by body.id_user
having bool_or(name = 'name 2') -- those with at least one `name = 'name 2'`
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.