2016-12-11 1 views
0

Wie im Titel angegeben, versuche ich eine Abfrage, die eine Volltextsuche in mehreren Zeilen vornimmt, gegen einen Jsonb-Datentyp, mit verschachtelten Daten, ist das Problem als folgt:PostgreSQL Jsonb verschachtelte Muster übereinstimmende Textsuche über mehrere Zeilen

CREATE TABLE books (id int primary key, title text, info jsonb); 
INSERT INTO users (id, t, j) VALUES 
(1, 'title 1', '{"Characters": [{"Name": "foo"}]}'), 
(2, 'title 2', '{"Characters": [{"Name": "foo"},{"Name": "bar"}]}'); 
(3, 'title 3', '{"Characters": null}'); 

Frage:

ich möchte eine Abfrage für Bücher in jedem Buch mit den Namen der Charaktere, zu tun. Zum Beispiel Abfrage jedes Buch mit einem Zeichen mit dem Namen "foo". Während der obige Überblick nur ein Beispiel ist, verlangt mein Szenario im wirklichen Leben, dass ich mit dem Operator "~ *" nach dem Namen eines Charakters suche.

Bis jetzt bin ich ziemlich ratlos, also würde jede Hilfe geschätzt, danke.

Antwort

1
with cte (id, title, Name) as 
(
select id, title, jsonb_array_elements(info->'Characters')->>'Name' as Name 
from books 
where (info->>'Characters')::text is not null 
) 
select id, title, Name 
from cte 
where Name like 'fo%'; 

bestellen hier: http://rextester.com/TVKWC17198

Verwandte Themen