MariaDB 10.6如何用JSON_TABLE提取JSON对象的键到列中?
解决方案
在MariaDB 10.6中,直接通过JSON_TABLE遍历对象值($.*)时无法直接获取属性键,但可以通过先提取所有键,再关联对应值的方式实现,无需创建临时表:
SELECT key_name AS col1, col2, col3 FROM -- 提取JSON对象的所有属性键,转为表格行 JSON_TABLE( JSON_KEYS('{ "1": [1, 123.25], "10": [2, 110.5], "100": [3, 105.75] }'), '$[*]' COLUMNS ( key_name VARCHAR(255) PATH '$' ) ) AS keys_table -- 根据每个键动态提取对应数组值,拆分出所需列 JOIN JSON_TABLE( JSON_EXTRACT('{ "1": [1, 123.25], "10": [2, 110.5], "100": [3, 105.75] }', CONCAT('$."', key_name, '"')), '$' COLUMNS ( col2 INT PATH '$[0]', col3 DECIMAL(17,2) PATH '$[1]' ) ) AS values_table;
关键逻辑说明
- 提取键集合:用
JSON_KEYS获取对象所有属性键,再通过JSON_TABLE将键转为独立行; - 动态关联值:通过
CONCAT拼接路径,结合JSON_EXTRACT获取每个键对应的数组值; - 拆分数组元素:再次用
JSON_TABLE从数组中提取col2(数组第一个元素)和col3(数组第二个元素); - 关联结果:将键和对应的值行关联,得到完整的目标结果集。
执行后col1会正确填充为"1"、"10"、"100",col2和col3也能正常提取数组内的数值。
内容的提问来源于stack exchange,提问作者Thomas Jensen
相关产品推荐
相关产品推荐

