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

MySQL中如何动态将ENUM列值传入JSON_TABLE输出为多行结果

可行性结论

该动态需求完全可实现。你之前的两种写法报错,核心原因是MySQL对JSON_TABLE表函数的入参有语法限制:

  • 同一FROM层级下,JSON_TABLE无法直接引用平级声明的CTE/表的列
  • JSON_TABLE的第一个入参不支持直接传入标量子查询

正确实现写法

只需要调整CTE和JSON_TABLE的关联方式,用交叉连接让CTE的列在JSON_TABLE的参数上下文里可被识别即可,代码如下:

WITH t AS (
SELECT REPLACE(CONCAT("[", SUBSTRING(COLUMN_TYPE, 6, LENGTH(COLUMN_TYPE) - 6), "]"), "'", '"') AS types
   FROM information_schema.COLUMNS
  WHERE TABLE_SCHEMA='myschema' 
    AND TABLE_NAME='tbl_items'
    AND COLUMN_NAME='itemTypes'
  LIMIT 1
)
SELECT tt.type
FROM t
CROSS JOIN JSON_TABLE(t.types, "$[*]" COLUMNS( type CHAR(1) PATH "$" )) AS tt;

执行后即可得到你预期的每个枚举值单独成行的结果。


注意事项
  • 该写法要求MySQL版本为8.0.19及以上,更低的8.0版本不支持在JSON_TABLE中引用关联表的列。
  • 如果你的枚举值长度超过1个字符,请调整type CHAR(1)中的字符长度定义,避免枚举值被截断。
  • 你当前用字符串替换把ENUM定义转成JSON数组的逻辑,仅适用于枚举值不含转义单引号的常规场景,如果枚举值本身包含单引号,需要额外补充转义处理逻辑,避免生成非法JSON格式导致JSON_TABLE执行失败。

内容的提问来源于stack exchange,提问作者Yanick Rochon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 00:31:04