sql >> Databáze >  >> RDS >> PostgreSQL

jsonb dotaz LIKE na vnořené objekty v poli

Vaše řešení lze ještě zjednodušit:

SELECT r.res->>'name' AS feature_name, d.name AS detail_name
FROM   restaurants r
     , jsonb_populate_recordset(null::foo, r.res #> '{payload, details}') d
WHERE  d.name LIKE '%oh%';

Nebo ještě jednodušší, s jsonb_array_elements() protože ve skutečnosti nepotřebujete typ řádku (foo ) vůbec v tomto příkladu:

SELECT r.res->>'name' AS feature_name, d->>'name' AS detail_name
FROM   restaurants r
     , jsonb_array_elements(r.res #> '{payload, details}') d
WHERE  d->>'name' LIKE '%oh%';

dbfiddle zde

Ale to ne na co jste se ptali přesně:

Vracíte všechny prvky pole JSON (0-n na řádek základní tabulky), kde je jeden konkrétní klíč ('{payload,details,*,name}' ) odpovídá (rozlišují se malá a velká písmena).

A vaše původní otázka měla navíc vnořené pole JSON. Pro toto řešení jste odstranili vnější pole - udělal jsem totéž.

V závislosti na vašich skutečných požadavcích možnost vyhledávání textu cap z Postgres 10 může být užitečné.



  1. Dotaz na vztah Mysql many to many. Jak získat všechny značky filtrovaných příspěvků?

  2. Může být vnořený SP MySql úzkým hrdlem?

  3. Žádné liblwgeom při použití postgresql84 a postgis na Snow Leopard s MacPorts

  4. Funkce TRIM() v Oracle