Json 数组列拆分为行 SQL
Json Array Column split into Rows SQL
目前我的数据库(mariaDB 10.3)中有一个名为数据的列,其中包含一个 json 数组:
client| data
1 | '["a","b","c"]'
2 | '["k"]'
我想把它分解成
client| data
1 | "a"
1 | "b"
1 | "c"
2 | "k"
不幸的是,与 MySQL 8.0.
不同,MariaDB 不支持“取消嵌套”功能 JSON_TABLE()
我们只剩下某种迭代方法,通常是使用 table 个数字来枚举数组元素。如果你有一个 table,其行数至少与数组中元素的最大数量一样多,比如说 bigtable
,你可以这样做:
select client, json_unquote(json_extract(t.data, concat('$[', n.rn - 1, ']'))) value
from mytable t
inner join (select row_number() over() rn from bigtable) n
on n.rn <= json_length(t.data)
order by t.client, n.rn
client | value
-----: | :----
1 | a
1 | b
1 | c
2 | k
目前我的数据库(mariaDB 10.3)中有一个名为数据的列,其中包含一个 json 数组:
client| data
1 | '["a","b","c"]'
2 | '["k"]'
我想把它分解成
client| data
1 | "a"
1 | "b"
1 | "c"
2 | "k"
不幸的是,与 MySQL 8.0.
不同,MariaDB 不支持“取消嵌套”功能JSON_TABLE()
我们只剩下某种迭代方法,通常是使用 table 个数字来枚举数组元素。如果你有一个 table,其行数至少与数组中元素的最大数量一样多,比如说 bigtable
,你可以这样做:
select client, json_unquote(json_extract(t.data, concat('$[', n.rn - 1, ']'))) value
from mytable t
inner join (select row_number() over() rn from bigtable) n
on n.rn <= json_length(t.data)
order by t.client, n.rn
client | value -----: | :---- 1 | a 1 | b 1 | c 2 | k