У меня есть Json столбец 'status' в таблице site_request_info со структурой данных, как указано ниже:
{
"portStatus":{
"status":"In Progress",
"hrefStatus":{
"155e4d40948647bd947fceb58131982d":"FOC Received",
"155e4d40948647bd947fceb58131983d":"FOC Received"
}
},
"broadCloudStatus":{
"status":"Customer Created",
"orderStatus":{
"124260smbbTesct1188":"Order Created",
"124260smbbTesct1188-CPE":"Order Created"
}
},
"provisioningStatus":"Completed"
}
Мое требование - фильтровать данные на основе HrefStatus, для этого я написал запрос, например :
select *
from product_requests p
inner join billing_Account b on p.account_id= b.account_id
inner join network_id n on b.account_id= n.account_id
inner join site_request_info s on n.networkid_uuid=s.networkid_uuid and s.product_request_id=p.request_id
**inner join json_each_text(cast(s.status->'portStatus'->'hrefStatus' as json)) d on true**
where p.request_status='In Progress' and d.value IN ('FOC Received');
из-за использования функции json_each_text () я получаю две строки с одинаковыми данными, которые я не хочу, чтобы мой запрос возвращал. моя цель - выбрать все те строки, у которых hrefStatus предоставлен предложением IN
Я пробовал один альтернативный запрос, но я не могу использовать класс In с этим решением
cast(status->'portStatus'->'hrefStatus' as json)::text like '%FOC Received%'