2016-12-11 3 views
0

как указано в заголовке, я пытаюсь выполнить запрос, который обеспечивает полный текстовый поиск по нескольким строкам, снова использует тип данных jsonb с вложенными данными, проблема такая, как следующим образом:PostgreSQL jsonb вложенный шаблон, сопоставляющий текстовый поиск по нескольким строкам

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}'); 

Вопрос:

Я хотел бы сделать запрос для книг, по именам символов в каждой книге. Например, запросите каждую книгу с символом «foo». Хотя приведенный выше план - это всего лишь пример, мой сценарий реальной жизни требует, чтобы я выполнил поиск по имени персонажа с помощью оператора «~ *».

До сих пор им очень нравилось, поэтому любая помощь была бы оценена, спасибо.

ответ

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

Проверьте это здесь: http://rextester.com/TVKWC17198

Смежные вопросы