Sql 迭代JSON数组中的每个元素并使用行连接
我试图编写一个SQL查询,将每一行与其自己的JSON数组元素交叉连接起来。 假设这是我们拥有的数据(我知道,这没有多大意义): 我试图得到的最终结果如下:Sql 迭代JSON数组中的每个元素并使用行连接,sql,arrays,json,postgresql,lateral-join,Sql,Arrays,Json,Postgresql,Lateral Join,我试图编写一个SQL查询,将每一行与其自己的JSON数组元素交叉连接起来。 假设这是我们拥有的数据(我知道,这没有多大意义): 我试图得到的最终结果如下: | id | name | score | point | |----|------|-------|-------| | 1 | john | 20 | 10 | | 1 | john | 25 | 15 | | 2 | jane | 25 | 15 | | 2 | jane | 35 |
| id | name | score | point |
|----|------|-------|-------|
| 1 | john | 20 | 10 |
| 1 | john | 25 | 15 |
| 2 | jane | 25 | 15 |
| 2 | jane | 35 | 45 |
我如何编写一个执行此任务的查询?我没有创建新函数的授权,因此这必须是纯select语句,而不是plpgsql语句。您可以使用横向连接和
json[b]\u数组元素取消请求:
select t.id, t.name, i.obj ->> 'score' as score, i.obj ->> 'point' as point
from mytable t
cross join lateral jsonb_array_elements(t.info) i(info)
这真是难以置信。如何阅读更多有关此技术的信息?我发现横向连接的东西非常复杂,我无法让它们中的任何一个工作,这一个太简单了。我真的很想了解其中的一些含义,特别是I(info)
notation@ÖzençB.:这是一个很好的起点。见“7.2.1.5.横向子查询”一节。
select t.id, t.name, i.obj ->> 'score' as score, i.obj ->> 'point' as point
from mytable t
cross join lateral jsonb_array_elements(t.info) i(info)