postgresql中的sql-select

ncgqoxb0  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(782)

我很难在一个基础上找到值,因为所有的例子都引用了在简单json中找到信息的相同方法。
但是一个工作上的朋友给了我一个解决方案,我来分享。
最初的问题是:如何在嵌套的json中进行选择???
像这样的json:

{
   "vehicle":[
      {
         "vehicle_type":"Truck",
         "car_make":"Lotus",
         "car_model":"Esprit",
         "quantity":7,
         "seats":7,
         "price_hour":16,
         "price_day":147,
         "color":[
            "Purple",
            "Pink",
            "Blue",
            "White"
         ]
      }
   ]
}

要查看结构,可以使用https://jsoneditoronline.org/

iyr7buue

iyr7buue1#

我带来的答案使用select和regex:

select * from example
where example.jsonTest->>'vehicle' ~ 'color"\s*:\s*"?.*?Blue.*"?';

select * from example
where example.jsonTest->>'vehicle' ~ 'vehicle_type"\s*:\s*"?.*?SUV.*"?';

为了清楚起见,我在书中留下了一个有效的例子https://rextester.com/bqzp48785

**对不起,我英语不好

q9rjltbz

q9rjltbz2#

为了确定蓝色车辆和suv车型, jsonb_array_elements() 函数可以用于取消主数组的嵌套,然后 (j.elm->>'vehicle_type') = 'SUV' 进入 WHERE 第二条就足够了,而 (j.elm->>'color')::jsonb ? 'Blue' 是否应使用包含jsonb转换的?第一个的接线员,自从 (j.elm->>'color') 提取数组,而 (j.elm->>'vehicle_type') 做简单的弦乐。
因此不需要正则表达式,如以下查询:

SELECT e.*
  FROM example e
 CROSS JOIN jsonb_array_elements(jsonTest->'vehicle') j(elm)
 WHERE (j.elm->>'color')::jsonb ? 'Blue'

SELECT e.*
  FROM example e
 CROSS JOIN jsonb_array_elements(jsonTest->'vehicle') j(elm)
 WHERE (j.elm->>'vehicle_type') = 'SUV'

演示

相关问题