PostgreSQL - 选择具有给定元素的数组的JSON行

问题描述 投票:0回答:1

我有一个名为data_audit的PostgreSQL表,其中有一个名为body的列,其类型为json。每行包含一个具有以下结构的值:

{
  "target": {
    "ids": [
      "ID1",
      "ID2"
    ]
  }
}

(我删除了很多不相关的字段。)

我想选择ids数组(可能包含0个,1个或更多个字符串)包含特定值的所有行。

我尝试了各种组合的::jsonb[]ANY()@>json_array_elements_text()等等,但无济于事。

运行此查询的最简单,最有效的方法是什么?

这个表还没有投入生产,所以如果该字段属于另一种类型(jsonb?)会更容易/更有效,那么这可能是一种选择。

我正在运行PostgreSQL 10.3。

谢谢!

arrays json postgresql
1个回答
1
投票

这是查询所需内容的一种合适方式。

select * FROM data_audit cross join lateral 
json_array_elements_text (body->'target'->'ids')  as j(id)
where j.id ='ID1';

Demo

© www.soinside.com 2019 - 2024. All rights reserved.