PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

jsonb LIKE zapytanie dotyczące obiektów zagnieżdżonych w tablicy

Twoje rozwiązanie można jeszcze bardziej uprościć:

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%';

Lub jeszcze prościej, używając jsonb_array_elements() ponieważ tak naprawdę nie potrzebujesz typu wiersza (foo ) w ogóle w tym przykładzie:

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 tutaj

Ale to nie o co prosiłeś dokładnie:

Zwracasz wszystkie elementy tablicy JSON (0-n na wiersz tabeli bazowej), gdzie jeden konkretny klucz ('{payload,details,*,name}' ) pasuje (z uwzględnieniem wielkości liter).

Twoje oryginalne pytanie zawierało zagnieżdżoną tablicę JSON. Usunąłeś zewnętrzną tablicę dla tego rozwiązania — ja zrobiłem to samo.

W zależności od aktualnych wymagań nowa funkcja wyszukiwania tekstowego Postgresa 10 może się przydać.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Policz wiersze po dołączeniu do trzech tabel w PostgreSQL

  2. Zablokuj na SELECT, aby inny proces nie otrzymał starych danych

  3. Unikalne ograniczenie na wielu stołach

  4. Postgres:czy należy tworzyć indeksy przed czy po wypełnieniu tabel

  5. Znajdź nakładające się zakresy dat w PostgreSQL