sql >> Database >  >> RDS >> PostgreSQL

jsonb LIKE-query op geneste objecten in een array

Uw oplossing kan nog wat vereenvoudigd worden:

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

Of nog eenvoudiger met jsonb_array_elements() omdat je het rijtype niet echt nodig hebt (foo ) helemaal niet in dit voorbeeld:

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 hier

Maar dat is niet wat je vroeg precies:

U retourneert alle JSON-array-elementen (0-n per basistabelrij), waarbij één bepaalde sleutel ('{payload,details,*,name}' ) komt overeen (hoofdlettergevoelig).

En uw oorspronkelijke vraag had daarbovenop een geneste JSON-array. Je hebt de buitenste array voor deze oplossing verwijderd - ik deed hetzelfde.

Afhankelijk van uw werkelijke vereisten de nieuwe tekstzoekfunctie van Postgres 10 kan handig zijn.



  1. Hoe stel ik de tijdzone in op UTC in Play Framework 2.0 voor zowel productie als tests?

  2. Hoe tekst uit meerdere rijen samen te voegen tot een enkele tekenreeks op de Oracle-server?

  3. Laatste bericht in een berichtenreeks weergeven

  4. mySQL automatisch verhogen met 10 (ClearDB &Node)