首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将ENUM值转换为JSON_TABLE的可能方法?

将ENUM值转换为JSON_TABLE的可能方法?
EN

Stack Overflow用户
提问于 2022-06-13 14:22:08
回答 1查看 28关注 0票数 1

使用以下查询:

代码语言:javascript
复制
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';

我得到了这样的结果:

代码语言:javascript
复制
+-------------------------+
| types                   |
+-------------------------+
| ['a','b','c','d']       |
+-------------------------+

我怎么能得到这样的结果:

代码语言:javascript
复制
+--------------+
| type         |
+--------------+
| a            |
| b            |
| c            |
| d            |
+--------------+

我了解JSON_TABLE,并得到了我想要的静态列表:

代码语言:javascript
复制
SELECT *
FROM JSON_TABLE('["a","b","c","d"]', '$[*]' COLUMNS( type CHAR(1) PATH '$' )) AS tt;

但这是行不通的:

代码语言:javascript
复制
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 *
FROM JSON_TABLE(t.types, "$[*]" COLUMNS( type CHAR(1) PATH "$" )) AS tt;

#1109 -表函数参数中的未知表t‘

这两件事都没有:

代码语言:javascript
复制
SELECT *
FROM JSON_TABLE((
  SELECT REPLACE(CONCAT("[", SUBSTRING(COLUMN_TYPE, 6, LENGTH(COLUMN_TYPE) - 6), "]"), "'", '"')
    FROM information_schema.COLUMNS
   WHERE TABLE_SCHEMA='myschema' 
     AND TABLE_NAME='tbl_items'
     AND COLUMN_NAME='itemTypes'
   LIMIT 1
), "$[*]" COLUMNS( type CHAR(1) PATH "$" )) AS tt;

#1210 - JSON_TABLE的不正确参数

我在做什么这可能吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-13 14:29:40

这是ENUM的缺点之一--允许的值列表存储在BLOB中,如果您想查询离散的值来生成UI中的值下拉列表或类似的东西,您就可以执行“有趣”的解析工作。

您在正确的轨道上,但是要使用CTE,您必须在查询中引用该CTE:

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

或者,只需按-is获取ENUM定义,并在应用程序代码中解析它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72604454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档