Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用JSON_表将数组转换为列_Mysql_Sql_Arrays_Json - Fatal编程技术网

Mysql 使用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

我有一个数据库列(名为“details”),格式为JSON对象,其中包含以下数据:

'{"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对象拆分。如果有道理的话。