如何查询一系列JSONB

0

的问题

我已经表(单)与 jsonb[] 列名 steps 在Postgres数据库。

我需要创建SQL query选择的记录步骤1和2和3已经 成功地位

[
 {
  "step_name"=>"Step1",
  "status"=>"success",
  "timestamp"=>1636120240
  },
 {
  "step_name"=>"Step2",
  "status"=>"success",
  "timestamp"=>1636120275
 },
 {
  "step_name"=>"Step3",
  "status"=>"success",
  "timestamp"=>1636120279
 },
 {
  "step_name"=>"Step4", 
  "timestamp"=>1636120236
  "status"=>"success"
  }
]

表结构 id|名称|步骤(jsonb)

arrays jsonb postgresql sql
2021-11-18 10:35:40
2

最好的答案

1

'正常的' steps 成一个名单象的项目,并检查是否他们每个人都有 "status":"success". 顺便说一句你的例子是不是有效的手机中。 所有 => 需要替换为 : 和一个逗号丢失。

select id, name from orders
where
(
 select bool_and(j->>'status' = 'success') 
 from jsonb_array_elements(steps) j
 where j->>'step_name' in ('Step1','Step2','Step3') -- if not all steps but only these are needed
);
2021-11-18 13:18:38

我们可以使用这一查询的情况下...然后...端的条款? 为前。 如果步骤1','2','3'是成功了有"Devilered"状态
Timothy94

是的,肯定的。 有几种选择。 我想而做出的查询作的声明尽可能避免硬编码的详细信息。 但这是个人品味问题。
Stefanov.sm
0

你可以使用JSON值包含操作检查的条件存在,或者不

演示

select
  *
from
  test
where
  steps @> '[{"step_name":"Step1","status":"success"},{"step_name":"Step2","status":"success"},{"step_name":"Step3","status":"success"}]'
2021-11-18 13:00:24

如果什么数量的步骤是未知的前期?
Stefanov.sm

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................