You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;

关键逻辑说明

  1. 提取键集合:用JSON_KEYS获取对象所有属性键,再通过JSON_TABLE将键转为独立行;
  2. 动态关联值:通过CONCAT拼接路径,结合JSON_EXTRACT获取每个键对应的数组值;
  3. 拆分数组元素:再次用JSON_TABLE从数组中提取col2(数组第一个元素)和col3(数组第二个元素);
  4. 关联结果:将键和对应的值行关联,得到完整的目标结果集。

执行后col1会正确填充为"1"、"10"、"100",col2和col3也能正常提取数组内的数值。

内容的提问来源于stack exchange,提问作者Thomas Jensen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 19:36:11