Ako Dotaz pole JSONB

0

Otázka

Mám tabuľka (objednávky) s jsonb[] stĺpec s názvom steps v Postgres db.

Potrebujem vytvoriť SQL dotaz vyberte záznamy, kde Krok 1 a Krok 2 a Krok 3, má úspech stav

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

štruktúru tabuľky id | názov | kroky (jsonb)

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

Najlepšiu odpoveď

1

'Normalizovať' steps do zoznamu JSON položky a skontrolovať, či sa každý z nich má "status":"success". BTW váš príklad nie je platný JSON. Všetky => je potrebné vymeniť s : a čiarka chýba.

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

Môžeme použiť tento dotaz s puzdrom...POTOM... KONIEC odsek ? Pre ex. ak Krok 1','Krok 2','Krok 3" je úspech, aby bol "Devilered" stav
Timothy94

Áno, určite. Existuje niekoľko možností. Snažím sa však, aby sa otázky ako deklaratívne, ako je to možné a vyhnúť sa ťažko kódovanie detaily. Ale to je vec osobného vkusu skutočnosti.
Stefanov.sm
0

Môžete použiť JSON hodnota obsahovať prevádzky kontrola stavu neexistuje alebo nie

Demo

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

Čo v prípade, ak počet krokov nie je známy vopred?
Stefanov.sm

V iných jazykoch

Táto stránka je v iných jazykoch

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