2016-06-22 2 views
1

У меня есть таблица с этими данными:Как отфильтровать список 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

+0

это работает :) это хорошо? 'SELECT DISTINCT x.properties - >> 'name' FROM my_table t, ( SELECT json_array_elements (json_array_elements (accounts :: JSON) -> 'properties') Свойства AS FROM my_table ) x WHERE x.properties - >> 'id' = t.property; ' – HoTicE

ответ

1

Вы можете использовать ЛЕВАЯ БОКОВАЯ 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) 
Смежные вопросы