表格
CREATE TABLE users
(
username VARCHAR(128) PRIMARY KEY,
info JSONB
);
INSERT INTO users (username, info)
VALUES
('Lana', '[
{
"id": "first"
},
{
"id": "second"
}
]'),
('Andy', '[
{
"id": "first"
},
{
"id": "third"
}
]');
所以我想找到所有的用户,他们的info.id
包含在类似[“first”]的数组中。
请求应类似于:
SELECT *
FROM users
where jsonb_path_exists(info, '$.id ? (@ in ("first", "second", "third",...) )');
但我找不到正确的实现
2条答案
按热度按时间7cwmlq891#
您需要使用
$[*]
迭代数组元素,然后使用==
或者收集所有ID并使用
?|
运算符:这将返回包含 * 至少 * 其中一个值的行。
如果需要查找包含所有值的行,请改用
?&
。ep6jt1vc2#
在SQL/JSON路径语言中没有
IN
运算符。如果你想从众多的选择中找到一个,请使用正则表达式,例如: