Извлеките массив из столбца postgres json и сопоставьте его
create table test(a json);
insert into test(a)
values('{"orders":[{"orderId":1}, {"orderId":2, "status":"done"}, {"orderId":3}]}');
Учитывая структуру выше, Могу ли я получить массив или набор orderIds, которые не "сделаны"? И под этим я подразумеваю, могу ли я получить orderIds от sql или plpgsql?
Любой совет был бы великолепен! Большое спасибо!
1 ответ:
Как только я исправил ваш полностью сломанный json, это был просто запрос
LATERAL
, чтобы распаковать массив и отфильтровать его.select (x->>'orderId')::integer from test, json_array_elements(a->'orders') x where (x ->> 'status') IS DISTINCT FROM 'done';
Я использовал
IS DISTINCT FROM
, поэтому мне не пришлось тестировать для обоихNULL
(без ключа) и!= 'done'
.