Как выполнить запрос ILIKE к столбцу типа JSONB?

У меня есть столбец "category_products" с типом данных JSONB. В этот столбец данные вставляются в виде массива, и этот массив содержит объекты. и этот объект содержит массив объектов.

Здесь мне нужно выполнить запрос ILIKE для product_name.

пример

category_products
-----------------
[{"products":[{product_name: product_one, price: 123}, {product_name: product_two, price: 999}]]
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
0
88
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете сначала сгладить свои данные, используя боковое соединение с 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.

Bennison J 28.11.2022 06:57

Другие вопросы по теме