我在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,6 ]}}]|
| 三个|[{"操作":"阅读","主题":"根公司","条件":{"根公司ID":{" $in ":[5 ]}}}]|
我需要获取(5)中具有rootcompanyid的所有帐户的详细信息。如果任何帐户详细信息中存在任何rootcompanyid的的一部分,则应显示结果。因此输出应包含account_id--〉1和3行
下面的查询只提取最后一行(account_id = 3),而不是第一行
SELECT *
FROM account_details
WHERE ((condition->0->>'conditions')::json->>'rootcompanyid')::json->>'$in' = '[5]';
- 预期产出**:如果任何帐户详细信息中存在任何rootcompanyid的的一部分,则应显示结果。
| 帐户标识|条件|
| - ------|- ------|
| 1个|[{"操作":"阅读","主题":"根公司","条件":{"根公司ID":{" $in ":[35,20,5,6 ]}}]|
| 三个|[{"操作":"阅读","主题":"根公司","条件":{"根公司ID":{" $in ":[5 ]}}}]|
请提供我任何解决方案,因为我是新的处理JSON条件
2条答案
按热度按时间ttisahbt1#
使用JSON包含操作符很容易做到这一点:
如果要搜索多个数组元素,请对
OR
使用上述条件中的两个,或者使用JSONPATH查询:2vuwiymt2#
您可以使用-〉〉操作符来提取PostgreSQL中JSON字段的嵌套键的值。基于嵌套键的值进行过滤的语法如下:
将table_name替换为表的名称,将json_field替换为JSON字段的名称,将nested_key替换为嵌套键的名称,将value替换为所需的值。