1. JSON_TABLE函数概述
JSON_TABLE是SQL标准中定义的一个强大函数,专门用于将JSON格式的数据转换为关系型表格形式。这个功能在MySQL 8.0+、Oracle 12c+等主流数据库中都得到了实现。它解决了传统SQL难以处理半结构化数据的痛点,让我们可以直接在数据库层面对JSON文档进行行列转换。
我最早接触这个函数是在处理电商平台的商品属性表时。当时商品特征都以JSON格式存储在单个字段中,需要提取特定属性进行分析报表。传统做法要么用应用代码处理,要么写复杂的字符串函数组合,而JSON_TABLE让这一切变得异常简单。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心语法解析
2.1 基础语法结构
JSON_TABLE的基本语法包含四个关键部分:
sql复制JSON_TABLE(
json_doc,
path_expression COLUMNS (
column_definition [, column_definition]...
)
) [AS] alias
其中:
json_doc:可以是JSON字符串字面量,或者包含JSON数据的列path_expression:JSONPath表达式,定位要提取的数据节点column_definition:定义输出列的各种属性alias:必须提供的表别名
2.2 列定义详解
每个列定义支持多种格式,最常用的有:
sql复制name type PATH 'json_path' [ON EMPTY] [ON ERROR]
name type EXISTS PATH 'json_path'
name FOR ORDINALITY
实际项目中,我经常组合使用这些格式。比如提取用户地址信息:
sql复制COLUMNS(
user_id FOR ORDINALITY,
country VARCHAR(20) PATH '$.address.country',
city VARCHAR(20) PATH '$.address.city',
has_phone BOOLEAN EXISTS PATH '$.phone'
)
