MySQL 8中使用JSON_TABLE提取带唯一键的嵌套JSON为行数据
解决MySQL 8中JSON_TABLE提取带唯一键的嵌套JSON问题
你的问题出在JSON_TABLE的列路径定义错误。当使用$.actors.*遍历actors下的所有子对象时,每一行已经对应一个完整的演员对象(比如{"name":"Arnold", "address":"xxx"}),此时列的路径不需要额外加$.*前缀,直接引用对象内的属性即可。
正确的查询语句
SELECT actors.* FROM tb, JSON_TABLE(json_col, '$.actors.*' COLUMNS ( name VARCHAR(40) PATH '$.name', address VARCHAR(100) PATH '$.address') ) actors;
执行结果
| name | address |
|---|---|
| Arnold | 780 Mission St, San Francisco, CA 94103 |
| Sylvester | 75 37th Ave S, St Cloud, MN 94103 |
| Al Pacino | 1262 Roosevelt Trail, Raymond, ME 04071 |
补充(如需提取唯一键)
如果需要同时获取演员的ID(101、102、103),可以使用以下查询(适配MySQL 8.0.14及以上版本):
SELECT actor_id, actors.name, actors.address FROM tb, JSON_TABLE( JSON_KEYS(json_col, '$.actors'), '$[*]' COLUMNS (actor_id INT PATH '$') ) ids, JSON_TABLE( json_col, CONCAT('$.actors.', actor_id) COLUMNS ( name VARCHAR(40) PATH '$.name', address VARCHAR(100) PATH '$.address' ) ) actors;
内容的提问来源于stack exchange,提问作者Naveen Chand K
相关产品推荐
相关产品推荐

