2017-01-01 4 views
0

Чтение массива json - memsqlЧтение массива json - memsql

У меня есть массив, где элементы json.

Таблица:

CREATE TABLE `example` (
orderId BIGINT, 
`data` JSON NULL 
); 

Пример записи

orderId -> ZA/XYZ 
data -> [ 
{'item':1,'price':20}, 
{'item':2,'price':30}, 
{'item':3,'price':40} 
(...) 
] 

Когда я в поиске заказов, которые имеют по крайней мере один продукт больше, то 20, я использую этот SQL:

SELECT orderId FROM example WHERE data::`0`::price > 20 OR data::`1`::price > 20 OR data::`2`::price > 20 (...) OR OR OR.... 

Но я не знаю, сколько продуктов есть в заказах.

Есть ли решение этой проблемы?

Может быть что-то вроде этого:

SELECT orderId FROM example WHERE data::*::price > 20 ?? 

ответ

0

К сожалению, мы напрямую не поддерживают это в настоящее время.

Обойти это создать справочную таблицу со строками, содержащих 0, 1, 2, ...:

create reference table r (i bigint primary key); 
insert into r values (0), (1), (2), ...; 

Тогда вы присоединитесь, что и использовать каждое целое число, чтобы захватить соответствующее значение из массива и проверить ключ:

select distinct orderId from example, r where json_extract_double(json_extract_json(data, r.i), 'price') > 20; 
Смежные вопросы