Json数组列拆分为行SQL

问题描述

当前,我在数据库(mariaDB 10.3)中有一列称为数据并包含json数组:

let emitterCell = CAEmitterCell()      
let emitterLayer = CAEmitterLayer()
emitterLayer.emitterCells = [emitterCell]
view.layer.addSublayer(emitterLayer)

let button = UIButton(...)
button.addTarget(self,action: #selector(doSomething),for: .touchUpInside)
view.addSubview(button)

我想把它扼杀到

client| data
1     | '["a","b","c"]'
2     | '["k"]'

解决方法

不幸的是,与MySQL 8.0不同,MariaDB不支持“取消嵌套”功能JSON_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

Demo on DB Fiddle

client | value
-----: | :----
     1 | a    
     1 | b    
     1 | c    
     2 | k