我有一张表, struct 如下:

id values
123 {"something":{"insideSomething":{"tables":{"tableA":{"include":false},"tableB":{"include":true}}}}}

我想输出一个"Include"为真的表列表.

理想的结果如下所示:

id tables
123 (tableB,”{“”include””: true}")

我可以使用以下查询来输出结果,其中每个表都在自己的行中,与值ContentsBundle 在一起(我不介意每个id可能有多行).

从MyTable;中 Select id,json_each(Values::json#>‘{Something,inside Something,Tables}’)作为表

有没有好的方法来过滤这些结果,只包括那些符合我的标准的结果?感谢您的帮助,谢谢.

推荐答案

下面的查询使用递归cte遍历深度嵌套的json.这还有一个额外的好处,就是能够处理任意嵌套和命名的对象

with recursive cte as (
   select t.id, null parent, t1.key, t1.value from tbl t cross join jsonb_each(t.js) t1
   union all
   select c.id, c.key, t1.key, t1.value from cte c 
   cross join jsonb_each(case when jsonb_typeof(c.value) = 'object' then c.value else '{}'::jsonb end) t1
)
select * from cte where key = 'include' and value = 'true'::jsonb

See fiddle

Sql相关问答推荐

如何使用PostGIS从单个表中 Select 所有相交面组

LAG函数通过丢弃空值返回前一行

如何连接第二个表并将其内容输入到第一个表的单个字段中?

解析键-值对,根据值 Select ,并使用SQL创建新列

连接特定行号

SQL -滞后于上一个非重复值

有没有办法在Postgres中存储带有时区的时间戳,而不将其转换为UTC

如何在presto中映射id与名称

基于多参数的SQL Server条件过滤

SQL中相同表内的VLOOKUP等价

BigQuery数组是否包含NULL值的判断方法

Oracle PL/SQL长期运行问题

编写查询以根据级别 (p2) 返回父位置

Select 字段,除非另一个字段包含重复项

为数组中的每个元素从表中收集最大整数

条件意外地显着降低性能的地方

查找具有相同连接列数据的所有记录

Postgres 条件求和函数

ACCESS SQL - 有没有办法使用通配符仅 Select 字段的特定部分?

PostgreSQL Select 具有两列的自引用