【发布时间】:2020-06-02 04:11:12
【问题描述】:
我有一个选择查询,女巫返回一个 array_to_json 对象。我想根据具体的键和值过滤选择的结果。
这是我的实际查询:
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';
但它什么也不返回。还有其他查询方式吗?
【问题讨论】:
-
您是否有理由不想从最里面的子查询中过滤它?
WHERE name = 'name' AND value ='some_value' -
是的,有。这是因为我需要整个 json,如果我使用 where name = 'name' 我没有其他名称的字段,你明白吗?
-
内部
group by的目的是什么?为什么不用distinct? -
目的是让很多行通过user_id只返回一个json数组。如果我不通过我的查询做内部组将不会返回我期望的全部结果......
标签: sql postgresql where-clause