首页/数据/SQL 速查/JSON_TABLE 展开 JSON 数组(MySQL 8)
本包目录(311 条)
查询基础33 条连接与子查询40 条聚合与窗口函数54 条
函数速查60 条
变更与事务52 条性能与执行计划72 条

JSON_TABLE 展开 JSON 数组(MySQL 8)

把 JSON 数组转成关系行:MySQL 的 JSON_TABLE 可在 FROM 中直接展开,便于与普通表连接和聚合。

SQL 速查数据更新于 2026-10-12

MySQL

MySQL
SELECT o.id, jt.sku, jt.qty
FROM orders o,
     JSON_TABLE(o.items, '$[*]' COLUMNS (
         sku VARCHAR(32) PATH '$.sku',
         qty INT         PATH '$.qty'
     )) AS jt
WHERE o.id = 100;

PostgreSQL 等价

PostgreSQL 等价
SELECT o.id, item->>'sku' AS sku, (item->>'qty')::int AS qty
FROM orders o
CROSS JOIN LATERAL jsonb_array_elements(o.items) AS item;
MySQLJSON_TABLE(expr, path COLUMNS(...));支持嵌套子句 NESTED PATH
PostgreSQLjsonb_array_elements / jsonb_to_recordset + LATERAL
用途订单明细、事件属性、标签数组的规范化查询

易错点

  • JSON_TABLE 结果行数取决于数组长度:父行会被复制,聚合前先想清楚粒度
  • 数组为空时展开结果为零行,需要保留父行时用 LEFT JOIN LATERAL 而不是 CROSS JOIN

数据来源与参考

  • MySQL 8.0 Reference Manual · JSON_TABLE
  • PostgreSQL Documentation · JSON Functions and Operators
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌