我有一个像这样的表,让我们称之为base_table:
id | date | json_array
---+-------------+------------------
1 2018-01-01 [{..a..},{..b..}]
2 2018-01-01 [{..c..}]
3 2018-01-01 [{..d..}]
4 2018-01-01 [{..e..},{..f..}]
. . .
. . .
. . .
json_array列始终包含1个或2个元素。
我需要在SQL中进行选择,我可以在每行显示:base_table中的相应id;它的顺序(如果元素在数组中位于第1或第2位); json_array的元素。
输出应该是这样的:
id | order | json_object
---+-------+------------
1 1 {..a..}
1 2 {..b..}
2 1 {..c..}
3 1 {..d..}
4 1 {..e..}
4 2 {..f..}
. . .
. . .
. . .
但是我在显示元素的顺序方面遇到了很多麻烦......有人可以帮忙吗?
数据库位于PostgreSQL 9.6.1
中答案 0 :(得分:1)
使用json_array_elements(json_array) with ordinality
:
with my_table(id, json_array) as (
values
(1, '[{"a": 1}, {"b": 2}]'::json),
(2, '[{"c": 3}]'),
(3, '[{"d": 4}]'),
(4, '[{"e": 5}, {"f": 6}]')
)
select id, ordinality, value
from my_table
cross join json_array_elements(json_array) with ordinality;
id | ordinality | value
----+------------+----------
1 | 1 | {"a": 1}
1 | 2 | {"b": 2}
2 | 1 | {"c": 3}
3 | 1 | {"d": 4}
4 | 1 | {"e": 5}
4 | 2 | {"f": 6}
(6 rows)
阅读 7.2.1.4。 the documentation.
中的表函数