我如何查询jsonb数组以查找它是否包含查询列表中的值?

目前我的桌子看起来像这样

 id |                 companies                 
----+-------------------------------------------------------------------
  1 | {"companies": [{"name": "Google", "industry": "TECH"}, 
    |                {"name": "FOX News", "industry": "MEDIA"}]}
----+--------------------------------------------------------------------
  2 | {"companies": [{"name": "Honda", "industry": "AUTO"}]}
----+--------------------------------------------------------------------
  3 | {"companies": [{"name": "Nike", "industry": "SPORTS"}]}

我想获取所有companies包含JSONB数组的行,其中JSONB数组包含列表中具有行业的公司["TECH", "SPORTS"]

在此示例中,查询将返回第1行和第3行。

由于所涉及的嵌套,我不确定如何执行此操作。

专线小巴

您可以使用jsonb_array_elements()exists

select t.*
from mytable t
where exists (
    select 1
    from jsonb_array_elements(t.companies -> 'companies') x(obj)
    where x.obj ->> 'industry' in ('TECH', 'SPORTS')
)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章