With a table like this: Table "public.x" Column | Type | Modifiers --------+-------+----------- j | jsonb | and data like this: j -------------------------------------------------- {"a": 1, "people": [{"id": 2002}, {"id": 2004}]} {"a": 3, "people": [{"id": 2003}, {"id": 2005}]} (2 rows) I'd like to be able to find any row with a particular people id attribute. I can do it explitly like this: select * from x where j->'people'->0->'id' = '2003'::jsonb; j -------------------------------------------------- {"a": 3, "people": [{"id": 2003}, {"id": 2005}]} (1 row) but that doesn't help if I need to find if any person matches the id attribute I'm looking for. I can get part of the way by searching like this: => select * from ( select jsonb_array_elements(j #>'{people}') as jae from x ) y where jae->'id' = '2002'::jsonb; jae -------------- {"id": 2002} (1 row) but I can't work out how to return the whole row containing a desired people id value. Thanks for any help Rory