【发布时间】:2021-02-10 22:05:35
【问题描述】:
使用 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 中使用 JSON_TABLE() 的唯一合理方法,因此您应该升级。另一种方法是将数据存储在正常的行和列中。无论如何,我建议您避免使用 JSON,因为您需要在 JSON 字段中搜索特定值。我建议仅在选择列表中引用 JSON 字段,不要在查询的其他子句中引用。
-
这是一个现有的数据库(此处未显示)。我们不在 SQL 查询中使用 JSON 数据,这是出于数据恢复的目的,这有助于根据 JSON blob 中的某些值缩小我们的修复范围。除此之外,它没有被数据库触及。是的,升级到 MySQL 8 会很好......
标签: mysql sql arrays json unnest