在where子句中使用jsonb数组

问题描述 投票:0回答:1

我有这张桌子:

Directives Table:
user_id: 5
account_id: 1
filters: { "a": "my value", "names": ["myname", "yourname"] } -- jsonb

我想通过判断

Directives
是否是
filters->name
元素的集合(数组?)来过滤
IN
表中的行:

即:

SELECT * FROM directives
WHERE filters->names IN ['yourname']
sql postgresql jsonb
1个回答
1
投票

您显示为伪代码的内容将与

jsonb
?
运算符
:

一起工作
SELECT *
FROM   directives
WHERE  filters->'names' ? 'yourname';

如果您实际上正在寻找嵌套 JSON 数组和输入数组之间的任何交集,请使用

jsonb
?|
运算符
:

SELECT *
FROM   directives
WHERE  filters->'names' ?| '{noname, yourname, hisname}';

小提琴

要么通过表达式上的 GIN 索引支持

filters->'names'
。参见:

© www.soinside.com 2019 - 2024. All rights reserved.