在JSONB列POSTGRESQL中获取嵌套值

时间:2020-04-10 09:14:33

标签: postgresql jsonb

我有一个带有jsonb列的表guest_group。我想查询一个ID_Context等于protelIO的ID。

在此表的列:

[
   {
      "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"}]

我如何才能走最后一步,仅获得带有值键对ID的{​​{1}}键的值?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我认为这将为您带来理想的结果。也许不是很漂亮:-)

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';   

最好的问候,
比尼亚尼