postgres:查找与数组中的值匹配的嵌套json值
我有一个产品表,其中postgres:查找与数组中的值匹配的嵌套json值,json,postgresql,Json,Postgresql,我有一个产品表,其中数据是一个jsonb字段。 内部的JSON如下所示: { id: 1, name: "Paper", locations: [ {locationId: 111, x: 1, y:1}, {locationId: 210, x: 27, y:86}, {locationId: 140, x: 34, y:134}, ] } 我有一个查询,返回至少一个位置id与给定id匹配的产品 SELECT id FROM
数据
是一个jsonb字段。
内部的JSON如下所示:
{
id: 1,
name: "Paper",
locations: [
{locationId: 111, x: 1, y:1},
{locationId: 210, x: 27, y:86},
{locationId: 140, x: 34, y:134},
]
}
我有一个查询,返回至少一个位置id与给定id匹配的产品
SELECT id FROM product WHERE product.data ->'locations' @> '[{"locationId: GIVEN_ID}]'
现在问题来了:我想对给定的\u ID\u列表的查询进行调整,以使我得到的所有产品中至少有一个locationId在给定的\u ID\u列表中。对于OR条件,您需要取消对数组的测试,并将其与现有条件相结合
select p.id
from product p
where exists (select *
from jsonb_array_elements(p.data -> 'locations') as x(item)
where x.item ->> 'locationId' in ('1', '2', '3'));
jsonb
,以便能够应用@>
运算符) SELECT DISTINCT -- 4
mycol ->> 'name' -- 3
FROM
mytable,
json_array_elements(mycol -> 'locations') as elements -- 1
WHERE '[111, 210]'::jsonb @> (elements -> 'locationId')::jsonb -- 2