【发布时间】:2019-07-13 03:30:59
【问题描述】:
假设表中的每个 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。否则(至少有一个带有 message 的对象有一个非空数组),返回 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
【问题讨论】:
-
请始终从您的 Postgres 版本开始。除其他外,可用工具的库取决于它。以及
table1和table2的表定义 - 以及对这两个表的解释。或从您的问题中删除table2。
标签: postgresql jsonb