最后我决定试一试这个强大的JSON_TABLE
函数,我一直在到处看到,我有一个问题。
我找到的复制它的最小查询是:
SELECT * FROM JSON_TABLE('[{"foo":"bar","bar":5}]','$[*]' columns ( foo text path '$.foo' , bar int path '$.bar' , whole_row_json longtext path '$' )) AS x
或者甚至包裹得像
SELECT * FROM JSON_TABLE('{"data":[{"foo":"bar","bar":5}]}','$.data[*]' columns ( foo text path '$.foo' , bar int path '$.bar' , whole_row_json longtext path '$' )) AS x;
但是对于一个复杂的需求(和调试目的),我需要整个json文档在一个列中,但是我一直收到null
| 喷火|棒|整行json|
| - -|- -|- -|
| 棒|五个|零值|
我读了文档,甚至这个符号也用在了另一个答案上,所以,我试过另一个奇怪的符号(比如“$.”,“$*”,“$. *”),但似乎没有任何效果。
我错过了什么?
MariaDB版本:10.7.4
编辑:我需要的是生成每一行的json文档,而不是整个json输入
这个问题似乎是在https://jira.mariadb.org/browse/MDEV-25875上报告的,根据我的发现,这个问题在裸机mariadb 10.7.4
和docker mariadb:10.6.8-focal
、mariadb:10.8
、mariadb:10.9-rc
上都不起作用
2条答案
按热度按时间1szpjjfi1#
尝试
我只是将数据类型从longtext更改为json。
更新
这在MariaDB 10.7.4上不起作用。
dgsult0t2#
我记得您在
path
后面命名的路径必须是相对于json_table()正在处理的子对象的,您不能使用该路径来引用顶级JSON文档。https://mariadb.com/docs/reference/mdb/functions/JSON_TABLE/表示:
常规列需要列的JSON路径表达式,该表达式用于在由行的JSON路径表达式生成的当前SQL/JSON项中搜索列。
(强调我)
但是,您可以在json_table()函数之外创建文档,然后在select-list中引用它:
| 喷火|棒|整个_json|
| - -|- -|- -|
| 棒|五个|[{“foo”:“bar”,“bar”:5}]|
https://dbfiddle.uk/?rdbms=mariadb_10.6&fiddle=b42384efd007b2e09193397b92328c0c