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

suzh9iv8  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(419)

现在我的table看起来像这样

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数组包含一个行业在列表中的公司 ["TECH", "SPORTS"] .
在本例中,查询将返回第1行和第3行。
我不知道怎么做,因为这涉及到筑巢。

tmb3ates

tmb3ates1#

你可以用 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')
)
ebdffaop

ebdffaop2#

另一种编写方法是使用contains操作符 @> ```
select *
from the_table t
where t.companies -> 'companies' @> '[{"industry": "TECH"}]'
or t.companies -> 'companies' @> '[{"industry": "SPORTS"}]'

这就可以利用琴酒指数 `companies` 

相关问题