[英]Using JSON_TABLE to convert an ARRAY into Columns
我有一個格式為 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
任何幫助,將不勝感激。 謝謝
這是一個棘手的問題,因為對象的鍵是可變的。 這意味着您需要為每個對象分別提取鍵和值。 可以通過為每個JSON_TABLE
使用一個序數列並在其上加入它們來連接這些值:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.