微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从MySQL JSON数组中选择行?

如何解决如何从MySQL JSON数组中选择行?

使用MysqL 5.7,如何从JSON列中选择数组元素作为行?

Person

id      data
1       [{"name":"one"},{"name":"two"}]
2       [{"name":"three"},{"name":"four"}]

我想将JSON数组中的元素“透视”到行。 非工作状态下面的sql ...

SELECT
    p.id AS personId,d->'$.name' AS name
FROM
    Person p
    JSON_EXTRACT(p.data) d  # <-- not valid sql
WHERE
    d->'$.name' <> 'three'

预期产量

personId  name
1         one
1         two
2         four

解决方法

如果运行的是MySQL 8.0,则可以使用library(dplyr) df <- df %>% group_by(month) %>% mutate(dayminflowofthemonth = day[which.min(flow)]) %>% ungroup

json_table()

在早期版本中,一种替代方法是使用派生的数字表取消嵌套该数组:

select p.id,x.name
from person p
cross join json_table(
    p.data,'$[*]' columns (name varchar(50) path '$.name')
) x
where x.name <> 'three'

select * from ( select p.id,json_unquote(json_extract(p.data,concat('$[',n.num,'].name'))) name from person p inner join (select 0 num union all select 1 union all select 2) n on n.num < json_length(p.data) ) t where name <> 'three' 子查询应至少包含与表的任何JSON数组中的最大元素数一样多的元素。

DB Fiddle上的Demos:

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