Получить вложенное значение в столбце JSONB POSTGRESQL - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть таблица guest_group со столбцом jsonb. Я хочу запросить один идентификатор, где ID_Context равен protelIO.

Здесь столбец таблицы:

[
   {
      "protelSurname":"Smith",
      "servicio_tags":[
         "protel-info"
      ],
      "protelUniqueID":"[{\"ID\":\"294623726\",\"Type\":\"21\",\"ID_Context\":\"GHA\"},{\"ID\":\"4842148\",\"Type\":\"1\",\"ID_Context\":\"protelIO\"}]",
      "protelGivenName":"Seth"
   },
   {
      "value":"test",
      "display_name":"Traces",
      "servicio_tags":[
         "trace"
      ]
   }
]

Моя попытка:

SELECT field ->>'protelUniqueID' 
FROM guest_group gg
 cross join lateral  
jsonb_array_elements(custom_fields) AS field
 
WHERE value @> '{"servicio_tags": ["protel-info"]}'::jsonb


Это дало мне:

[{"ID":"294623726","Type":"21","ID_Context":"GHA"},{"ID":"4842148","Type":"1","ID_Context":"protelIO"}]

Как я могу go на последней миле получить только значение ключа ID с парой значений ключа "ID_Context":"protelIO"?

Я ценю вашу помощь!

1 Ответ

1 голос
/ 10 апреля 2020

Это даст вам желаемый результат, я думаю. Возможно, не очень красиво :-)

select * from (select jsonb_array_elements(f) from (
    select (field ->>'protelUniqueID')::jsonb f
    FROM guest_group gg,
    lateral jsonb_array_elements(custom_fields) AS field
    WHERE value @> '{"servicio_tags": ["protel-info"]}'::jsonb
) d(f)) dd(x) 
where x->>'ID_Context'='protelIO';   

С уважением,
Bjarni

...