我在PostgreSQL中有一个表
CREATE TABLE IF NOT EXISTS account_details
(
account_id integer,
condition json
)
此表中的数据包括
| 帐户标识|条件|
| - ------|- ------|
| 1个|[{"操作":"阅读","主题":"根公司","条件":{"根公司ID":{" $in ":[35,20,5,6 ]}}]|
| 第二章|[{"操作":"阅读","主题":"根公司","条件":{"根公司ID":{" $in ":[1,4,2,3 ]}}]|
| 三个|[{"操作":"阅读","主题":"根公司","条件":{"根公司ID":{" $in ":[5 ]}}}]|
| 四个|[{"操作":"阅读","主题":"根公司","条件":{"根公司ID":{" $in ":[1,2,3,5 ]}}]|
| 五个|[{"操作":"阅读","主题":"根公司","条件":{"根公司ID":{" $in ":[3,4 ]}}]|
| 六个|[{"操作":"阅读","主题":"根公司","条件":{"根公司ID":{" $in ":[4 ]}}}]|
| 七|[{"操作":"阅读","主题":"根公司","条件":{"根公司ID":{" $in ":[3 ]}}}]|
我需要获取rootcompanyid中存在的部分值
请指导我如何过滤嵌套JSON数据
- 预期产出**
- 病例:1例**
每当我向下面的查询传递输入rootcompanyid = 5时,它应该过滤掉account_id 1、3和4的详细信息
SELECT *
FROM account_details
WHERE ((condition->0->>'conditions')::json->>'rootcompanyid')::json->>'$in' = 5;
| 帐户标识|条件|
| - ------|- ------|
| 1个|[{"操作":"阅读","主题":"根公司","条件":{"根公司ID":{" $in ":[35,20,5,6 ]}}]|
| 三个|[{"操作":"阅读","主题":"根公司","条件":{"根公司ID":{" $in ":[5]}}]|
| 四个|[{"操作":"阅读","主题":"根公司","条件":{"根公司ID":{" $in ":[1,2,3,5]}}]|
- 案件:2起**
每当我向下面的查询传递输入rootcompanyid = 3,4时,它应该过滤掉account_id 2、4、5、6和7的详细信息
SELECT *
FROM account_details
WHERE ((condition->0->>'conditions')::json->>'rootcompanyid')::json->>'$in' = 3,4;
| 帐户标识|条件|
| - ------|- ------|
| 第二章|[{"操作":"阅读","主题":"根公司","条件":{"根公司ID":{" $in ":[1,4,2,3]}}]|
| 四个|[{"操作":"阅读","主题":"根公司","条件":{"根公司ID":{" $in ":[1,2,3,5 ]}}]|
| 五个|[{"操作":"阅读","主题":"根公司","条件":{"根公司ID":{" $in ":[3,4]}}]|
| 六个|[{"操作":"阅读","主题":"根公司","条件":{"根公司ID":{" $in ":[4]}}}]|
| 七|[{"操作":"阅读","主题":"根公司","条件":{"根公司ID":{" $in ":[3]}}]|
请给我最好的解决方案来过滤JSON格式的部分和匹配的rootcompanyid
1条答案
按热度按时间dgsult0t1#
您需要比较嵌套
json
中的元素。Here是一个示例:condition->0
-数组的第一个元素->>'conditions')::json
-从数组的第一个元素提取conditions
->>'rootcompanyid')::json
-从conditions
中提取rootcompanyid
::json->>'$in'
-从rootcompanyid
中提取$in
(rootcompanyid
的ID)按操作搜索:
要在
json array
中搜索特定的id
,您可以使用@>
运算符:或
LIKE
:您可以使用
json_array_elements_text
+exists
: