现在我的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行。
我不知道怎么做,因为这涉及到筑巢。
2条答案
按热度按时间tmb3ates1#
你可以用
jsonb_array_elements()
以及exists
:ebdffaop2#
另一种编写方法是使用contains操作符
@>
```select *
from the_table t
where t.companies -> 'companies' @> '[{"industry": "TECH"}]'
or t.companies -> 'companies' @> '[{"industry": "SPORTS"}]'