PostgreSQL中jsonb数组循环遍历获取相邻元素对的查询问题
实现方案
你可以结合generate_series生成数组下标,配合LATERAL关联实现相邻元素配对,以下是可直接运行的查询代码:
SELECT t.id, (t.transferList -> idx.i) ->> 'team' AS start_team, (t.transferList -> idx.i) ->> 'queue' AS start_queue, (t.transferList -> (idx.i + 1)) ->> 'team' AS end_team, (t.transferList -> (idx.i + 1)) ->> 'queue' AS end_queue FROM temp.transfers t CROSS JOIN LATERAL generate_series(0, jsonb_array_length(t.transferList) - 2) AS idx(i);
逻辑说明
- 用
jsonb_array_length获取每行transferList的数组长度,生成从0到「数组长度-2」的连续下标,确保每个下标i都存在对应的i+1位元素 CROSS JOIN LATERAL会为每行原表数据,关联生成对应数量的下标行,实现类似循环遍历的效果- 分别取下标
i和i+1位置的json元素,读取对应字段即可得到你需要的相邻配对结果
内容的提问来源于stack exchange,提问作者Suraj
相关产品推荐
相关产品推荐

