PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

jsonb LIKE заявка за вложени обекти в масив

Вашето решение може да бъде опростено още малко:

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

Или по-просто, но с jsonb_array_elements() тъй като всъщност не се нуждаете от типа ред (foo ) изобщо в този пример:

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 тук

Но това ене това, което попитахте точно:

Връщате всички елементи на JSON масив (0-n на ред на основна таблица), където един конкретен ключ ('{payload,details,*,name}' ) съвпада (чувствителен към регистър).

И вашият първоначален въпрос имаше вложен JSON масив върху това. Вие премахнахте външния масив за това решение - аз направих същото.

В зависимост от действителните ви изисквания новата възможност за търсене на текст на Postgres 10 може да е полезно.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да посочите списък със стойности за postgresql последователност

  2. превърнете отделната стойност на колони в редове postgres

  3. съвкупност от празен набор от резултати

  4. Защо всичките ми таблици в Rails 4/Postgres се създават с измерение 1?

  5. Защо SELECT без колони е валиден