簡體   English   中英

通過鍵和值查詢where子句中的json_array

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM