当前位置: 代码网 > it编程>编程语言>Javascript > mysql的jsonTable使用及说明

mysql的jsonTable使用及说明

2026年01月05日 Javascript 我要评论
json_table 是 mysql 8.0 中一个新的 json 函数。它也是一个表函数,返回值不是标量值而是结果集。json_table 将 json 文档(部分或全部)转换为关系表,以便您可以像

json_table 是 mysql 8.0 中一个新的 json 函数。它也是一个表函数,返回值不是标量值而是结果集。

json_table 将 json 文档(部分或全部)转换为关系表,以便您可以像使用普通表一样使用它。

json_table 函数从一个指定的 json 文档中提取数据并返回一个具有指定列的关系表。可以像普通的表一样使用 json_table () 返回的表。

json-table官方文档地址:

https://dev.mysql.com/doc/refman/8.0/en/json-table-functions.html#function_json-table

以下是jsontable的语法

json_table(
    expr,
    path columns (column_list)
)   [as] alias

column_list:
    column[, column][, ...]

column:
    name for ordinality
    |  name type path string path [on_empty] [on_error]
    |  name type exists path string path
    |  nested [path] path columns (column_list)

on_empty:
    {null | default json_string | error} on empty

on_error:
    {null | default json_string | error} on error

使用示例

假设我们有一个表包含id和名称:

create table t1
(
    id       varchar(32),
    name json
);

添加如下数据:

insert into t1
values (uuid_short(), json_array('john'));
insert into t1
values (uuid_short(), json_array('toma','smith'));
insert into t1
values (uuid_short(), json_array('aa','bb','cc','tt'));

现在,我们想要从 t1 表中查询所有名称和id,进行查询(在 mysql 中,json_table 函数的 json 路径表达式可以使用 $ 符号来指定。

$[*] 表示提取 json 文档中的所有属性):

select value,id
from t1
        ,
     json_table(name, '$[*]' columns (
         value varchar(255) path '$'
         )) as jt

数据将如下:

nested path 嵌套路径

nested path为其所属的子句中的每个匹配项生成一组记录。可以解决复杂的json嵌套数据转为行。

添加一条数据:

insert into t1
values ('1', json_array(json_object('a',1,'b',json_array(11,111)),
    json_object('a',2, 'b',json_array(22,222)),
    json_object('a',3)));

使用 nested path:

select jt.*
from t1,
     json_table(
             name,
             '$[*]' columns (
                 a int path '$.a',
                 nested path '$.b[*]' columns (b int path '$')
                 )
         ) as jt
where id = '1';

我们发现每次jsontable后依然会对应所在的id,比如:

上面需求的a,b列的id就是1而不是其他id。这其实是遵从了sql标准。

横向派生表

根据sql标准,mysql总是将带有表函数(如json_table())的连接视为使用lateral无论mysql发布版本如何,都是如此,这就是为什么即使在8.0.14之前的mysql版本中也可以加入此函数的原因。

在mysql 8.0.14及更高版本中,lateral 关键字是隐式的,不允许在 json_table() 之前使用。这也是根据sql标准。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com