Mysql将json数组分解为行

6qqygrtg  于 2022-12-03  发布在  Mysql
关注(0)|答案(1)|浏览(356)

从一个表中的一个列中,我需要提取关键字“user_id”的所有值,每行一个。如果为null或空数组,则返回NULL。类似于python pandas explode方法。
数组长度未知。
原始表:

| id | users                                                           |
|----|-----------------------------------------------------------------|
|  1 |[{"id": 2, "mail": "u1@ab.com"}, {"id": 3, "mail": "u2@ab.com"}] |
|  2 |[{"id": 5, "email": "user3@hi.com"}]"                            |
|  3 | []
                                                           |

已处理的表:

| id | users    |
|----|----------|
|  1 | 2        |
|  1 | 3        |
|  2 | 5        |
|  3 | NULL     |
efzxgjgh

efzxgjgh1#

select id, j.user_id from mytable left outer join 
json_table(users, '$[*]' columns (user_id int path '$.user_id')) as j on true;

+------+---------+
| id   | user_id |
+------+---------+
|    1 |       2 |
|    1 |       3 |
|    2 |       5 |
|    3 |    NULL |
+------+---------+

有关JSON_TABLE()函数的更多信息,请阅读https://dev.mysql.com/doc/refman/8.0/en/json-table-functions.html

相关问题