Cog*_*ero 2 mysql subquery mysql-json
这是我面临的问题的最低工作版本。按照文档页面上的JSON 表示例,我在 MySQL 8 中进行了下表测试,其中 id 是 INT 字段,data 是 JSON 字段。
id | data
-----------------------------
1 | [{"x": 2, "y": "8"}, {"x": "3", "y": "7"}, {"x": "4", "y": 6}]
Run Code Online (Sandbox Code Playgroud)
我可以使用以下语句成功获取数据(***):
SELECT data->"$[*]" as example FROM test t WHERE id = 1
Run Code Online (Sandbox Code Playgroud)
它返回“示例”列下:
[{“x”:2,“y”:“8”},{“x”:“3”,“y”:“7”},{“x”:“4”,“y”:6} ]
现在我想尝试从返回的数据构造一个 JSON_TABLE 。如果我手动将数据输入到 JSON_TABLE 查询中,即
SELECT * FROM JSON_TABLE(
'[{"x": 2, "y": "8"}, {"x": "3", "y": "7"}, {"x": "4", "y": 6}]',
"$[*]" COLUMNS (
rowID FOR ORDINALITY,
xval VARCHAR(100) PATH "$.x",
yval VARCHAR(100) PATH "$.y"
)
) AS tt
Run Code Online (Sandbox Code Playgroud)
然后按照文档就可以正常工作了。我得到成功的结果:
rowID xval yval
1 2 8
2 3 7
3 4 6
Run Code Online (Sandbox Code Playgroud)
但是,当我使用选择子查询时,即
SELECT * FROM JSON_TABLE(
SELECT data->"$[*]" FROM test t WHERE id = 1,
"$[*]" COLUMNS (
rowID FOR ORDINALITY,
xval VARCHAR(100) PATH "$.x",
yval VARCHAR(100) PATH "$.y"
)
) AS tt
Run Code Online (Sandbox Code Playgroud)
然后我得到
1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在 'SELECT data->"$[*]" FROM test t WHERE id = 1, "$[*]" COLUMNS ( rowID FOR OR' at line 附近使用的正确语法2
我还尝试将子选择语句(***)包装到括号中,即
SELECT * FROM JSON_TABLE(
(SELECT data->"$[*]" FROM test t WHERE id = 1),
"$[*]" COLUMNS (
rowID FOR ORDINALITY,
xval VARCHAR(100) PATH "$.x",
yval VARCHAR(100) PATH "$.y"
)
) AS tt
Run Code Online (Sandbox Code Playgroud)
但这给出了错误
1210 - JSON_TABLE 的参数不正确。
我认为这可能与 JSON 对象周围的引号有关?我也尝试过 JSON_QUOTE 和 JSON_UNQUOTE 但也没有运气。请帮忙。谢谢
这是这样做的方法:
SELECT tt.* FROM test
CROSS JOIN JSON_TABLE(
test.data,
'$[*]' COLUMNS (
rowID FOR ORDINALITY,
xval VARCHAR(100) PATH '$.x',
yval VARCHAR(100) PATH '$.y'
)
) AS tt
WHERE test.id = 1
Run Code Online (Sandbox Code Playgroud)
JSON_TABLE() 的文档仅显示使用 JSON 文字,这是一个不幸的疏忽。
MySQL Server 团队宣布 JSON_TABLE() 功能的原始博客显示了使用列引用代替 JSON 文字的示例。
我已经提交了 MySQL 向 JSON_TABLE() 文档添加示例的请求:https://bugs.mysql.com/bug.php?id =102089
更新:文档请求被关闭为“不是错误”,因为他们认为文档提供了足够的信息而没有代码示例。
| 归档时间: |
|
| 查看次数: |
1991 次 |
| 最近记录: |