Mysql 使用JSON_表将数组转换为列
我有一个数据库列(名为“details”),格式为JSON对象,其中包含以下数据:Mysql 使用JSON_表将数组转换为列,mysql,sql,arrays,json,Mysql,Sql,Arrays,Json,我有一个数据库列(名为“details”),格式为JSON对象,其中包含以下数据: '{"300-000012": {"is_complete": "False", "is_in_progress": "True"}, "300-000018": {"is_complete": "True", "is_in_progres
'{"300-000012": {"is_complete": "False", "is_in_progress": "True"},
"300-000018": {"is_complete": "True", "is_in_progress": "False"}}'
我似乎无法将数组转换为列。我试过了
SELECT mh.*, jt.*
FROM history AS mh,
JSON_TABLE (mh.details, '$[*]'
COLUMNS (
NESTED PATH '$.*' COLUMNS (jt_complete VARCHAR(255) PATH '$.is_complete'),
NESTED PATH '$.*' COLUMNS (jt_progress VARCHAR(255) PATH '$.is_in_progress')
)
) AS jt)
但我得到了一个错误代码
Error Code: 3143. Invalid JSON path expression
理想情况下,我会得到如下结果:
details jt_complete jt_progress
300-000012 FALSE TRUE
300-000018 TRUE FALSE
任何帮助都将不胜感激。Thx这是一个棘手的问题,因为对象的键是可变的。这意味着您需要分别提取每个对象的键和值。可以通过为每个
JSON_表
使用一个序数列并将它们连接到以下位置来连接这些值:
SELECT mh.id, jk.details, jt.jt_complete, jt.jt_progress
FROM history mh
JOIN JSON_TABLE(
JSON_KEYS(mh.details),
'$[*]' COLUMNS (
rn FOR ORDINALITY,
details VARCHAR(10) PATH '$'
)
) jk
JOIN JSON_TABLE(
JSON_EXTRACT(mh.details, '$.*'),
'$[*]' COLUMNS (
rn FOR ORDINALITY,
jt_complete VARCHAR(10) PATH '$.is_complete',
jt_progress VARCHAR(10) PATH '$.is_in_progress'
)
) jt ON jt.rn = jk.rn
出于好奇,如果您希望将数据存储在单独的列中,为什么要将数据存储在JSON中?我们将所有信息存储在一个JSON对象中,因此它位于一行中,但当我们想要利用数据时,我们需要将JSON对象拆分。如果有道理的话。