У меня есть столбец "category_products" с типом данных JSONB. В этот столбец данные вставляются в виде массива, и этот массив содержит объекты. и этот объект содержит массив объектов.
Здесь мне нужно выполнить запрос ILIKE для product_name.
пример
category_products
-----------------
[{"products":[{product_name: product_one, price: 123}, {product_name: product_two, price: 999}]]
Вы можете сначала сгладить свои данные, используя боковое соединение с jsonb_path_query
, а затем применить ILIKE
в предложении WHERE
по мере необходимости. Вот иллюстрация.
Смотрите демо.
select id, l, l ->> 'product_name' as prod
from the_table,
lateral jsonb_path_query(category_products, '$[*].products[*]') as l;
Обратите внимание, что ваши образцы данных вообще не действительны в формате JSON.
Не связано, но это было бы намного проще и чище с нормализованным дизайном данных.
Редактировать
Поскольку jsonb_path_query
не существует в версиях до PG12, вот альтернатива и новая демо.
select id, l, l ->> 'product_name' as prod
from the_table,
lateral jsonb_array_elements(category_products) as arr_ex,
lateral jsonb_array_elements(arr_ex -> 'products') as l;
Этот SQL-запрос работает в PostgreSQL версии 12, но не работает в версии 10. Пожалуйста, предоставьте любые другие запросы для работы в версии 10.