sql >> Database teknologi >  >> RDS >> PostgreSQL

jsonb LIKE-forespørgsel på indlejrede objekter i et array

Din løsning kan forenkles noget mere:

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

Eller endnu enklere med jsonb_array_elements() da du faktisk ikke har brug for rækketypen (foo ) overhovedet i dette eksempel:

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 her

Men det er ikke hvad du bad om præcis:

Du returnerer alle JSON-array-elementer (0-n pr. basistabelrække), hvor en bestemt nøgle ('{payload,details,*,name}' ) matcher (der skelnes mellem store og små bogstaver).

Og dit oprindelige spørgsmål havde et indlejret JSON-array oveni dette. Du fjernede det ydre array for denne løsning - jeg gjorde det samme.

Afhængigt af dine faktiske krav kan new tekstsøgning af Postgres 10 kan være nyttigt.



  1. Udførelsesplanens indvirkning på ASYNC_NETWORK_IO Venter – Del 1

  2. Hvad er brugen af ​​GO i SQL Server Management Studio &Transact SQL?

  3. LoadError forsøger at bruge MySQL med Ruby on Rails i Windows, RubyMine IDE

  4. Send datoparameter til indbygget forespørgsel