如何过滤JSONB列表

时间:2016-06-22 14:32:34

标签: postgresql jsonb

我有这个数据的表格:

id       | 1
accounts | [{"id": "100", "properties": [{"id": "PR-001", "name": "name1"}, {"id": "PR-002", "name": "name2"}]}]
property | "PR-001"

accounts是jsonb字段。

我需要获取所有property.name,其中accounts.property.id等于使用SELECT的属性。

我正在使用Postgres 9.5

1 个答案:

答案 0 :(得分:1)

你可以使用LEFT LATERAL JOIN:

WITH tbl (id,accounts,property) AS (
  SELECT 1, '{"id": "100", "properties": [{"id": "PR-001", "name": "name1"}, {"id": "PR-002", "name": "name2"}]}'::jsonb, 'PR-001'::text
  )
SELECT t.id, acc->>'name'
FROM tbl t
LEFT JOIN LATERAL jsonb_array_elements(t.accounts->'properties') acc ON (acc->>'id' = t.property)