我想转换一个名为 words
在一个名为 data_table
放进table里。栏目内容为:
{"123456":{"first":"hello","second":"there"},
"78910":{"first":"All good?"}
}
我想达到这样的效果:
ID | word |
-------+----------|
123456 |hello |
-------+----------|
78910 |All good? |
我试过这个:
SELECT * FROM data_table t1,
JSON_TABLE( t1.words, '$.123456.*' COLUMNS (word PATH '$.first')) AS jt;
但它返回一个#1064mysql语法错误。错误在哪里???
完整的错误代码(德语翻译):
Error in the SQL-Syntax. Please consult the manual for the correct syntax near '( t1.words, '$.123456.*' COLUMNS (word PATH '$.first')) AS jt LIMIT 0, 25' in line 2
此外,我还注意到本页的基本示例:
SELECT *
FROM
JSON_TABLE(
'[ {"c1": null} ]',
'$[*]' COLUMNS( c1 INT PATH '$.c1' ERROR ON ERROR )
) as jt;
还返回#1064语法错误(从德语翻译):
# 1064 - There's an error in your SQL-Syntax. Please consult the manual for the correct syntax near '(
'[ {"c1": null} ]',
'$[*]' COLUMNS( c1 INT PATH '$.c1' ERROR ON E...' on line 3
怎么了???顺便说一句,我的主机说我的mysql版本是10.3-mariadb。。
更新
不管我在这里尝试什么,我总是得到一个#1064mysql语法错误,告诉我在{后面的任何东西}附近更正我的语法 JSON_TABLE(
在我的声明中。怎么了?
根据这一点,json\ U表真的不适合我吗??
2条答案
按热度按时间rryofs0p1#
实际上,mariadb系统似乎不支持mysql服务器中支持的json\u表函数。。。
不过,我的主机声称他的“mysql版本”是“10.3-mariadb”,所以我有点困惑;我被告知他们有相同的功能,看起来我是被误导了?从我在网上看到的情况来看,mariadb似乎是mysql的一个重新实现,它改进了mysql服务器的很多特性,但是缺少一些特性,比如json_table函数。这是正确的,还是我在这里误解了什么,我真的应该能够使用json_table函数?
o2gm4chl2#
从你的案子来看,mariadb不支持
JSON_TABLE()
功能。可以通过在json数据中使用JSON_KEYS()
以及JSON_LENGTH()
在具有辅助表(如from)的查询中递归地执行函数information_schema
例如information_schema.tables
,并使用JSON_QUERY()
带索引(CONCAT('$.',ID)
)确定元素的值first
,那么JSON_EXTRACT()
为了提取所需的部分,最后JSON_UNQUOTE()
要去掉双引号:演示