postgresql中的sql-select

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

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

  1. {
  2. "vehicle":[
  3. {
  4. "vehicle_type":"Truck",
  5. "car_make":"Lotus",
  6. "car_model":"Esprit",
  7. "quantity":7,
  8. "seats":7,
  9. "price_hour":16,
  10. "price_day":147,
  11. "color":[
  12. "Purple",
  13. "Pink",
  14. "Blue",
  15. "White"
  16. ]
  17. }
  18. ]
  19. }

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

iyr7buue

iyr7buue1#

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

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

  1. select * from example
  2. 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') 做简单的弦乐。
因此不需要正则表达式,如以下查询:

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

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

演示

展开查看全部

相关问题