Предположим, что каждое значение jsonb в таблице имеет такую структуру:
{
"level1": [
{
"level2": [
{
"key": key,
"value": value,
"messages": [
]
},
{
"key": key,
"value": value,
"messages": [
]
},
{
"key": key,
"value": value,
"messages": [
]
}
]
}
]
}
Имена ключей level1
являются динамическими, поэтому могут быть любыми (поэтому я использую jsonb_object_keys
),Мне нужно проверить, является ли какой-либо объект внутри level2.messages
пустым на дату.То есть: если все level2.messages
в дате пусты, верните false.В противном случае (по крайней мере один из объектов с сообщением имеет непустой массив), верните true.
Я думал, что мог бы использовать функции json в подзапросе, но они не известны внутри подзапроса.У меня что-то вроде этого:
SELECT t2.date,
(SELECT 1 FROM fields WHERE jsonb_array_length(fields ->> 'messages') = 1 LIMIT 1) AS hasMessages
FROM table1 t1
INNER JOIN table2 t2 ON t2.id = t1.id,
jsonb_object_keys(t1.result) AS rootNode,
jsonb_array_elements(t1.result -> rootNode) AS level2,
jsonb_array_elements(level2 -> 'level2') AS fields
GROUP BY t2.date