如何解决如何从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 举报,一经查实,本站将立刻删除。