我在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 ]}}}]|
1条答案
按热度按时间jgwigjjp1#
使用JSON包含操作符很容易做到这一点:
如果要搜索多个数组元素,请对
OR
使用上述条件中的两个,或者使用JSONPATH查询: