mysql - MySQL 加入 JSON 数组
问题描述
我在 mysql 表中有这些行
id categoryNameSp categoryNameEn
1 Comida Food
2 Fruta Fruit
3 Fruta Seca Dried fruit
然后我在另一个表中有这一行
pid path
1 ["1", "2", "3"]
我想返回路径,但我想返回 categoryNameEn 而不是数字,所以返回将是:
pid path
1 ["Food","Fruit", "Dried fruit"]
解决方案
这需要使用JSON_TABLE功能以及JSON_ARRAYAGG聚合函数。
CREATE TABLE categories (id INT, name VARCHAR(30));
INSERT INTO categories VALUES (1, 'Food'), (2, 'Fruit'), (3, 'Dried Fruit');
CREATE TABLE stuff (pid INT, path JSON);
INSERT INTO stuff VALUES (1, '["1", "2", "3"]');
然后我们可以做以下(花哨的)查询:
SELECT pid, JSON_ARRAYAGG(c.name) FROM stuff AS s
JOIN JSON_TABLE(s.path, '$[*]' COLUMNS (category INT PATH '$')) AS cats
JOIN categories AS c ON cats.category = c.id
GROUP BY pid;
这个想法是从表中找到的 JSON 数据创建一个stuff
表。然后我们将它与类别表连接起来,并将结果聚合到一个 JSON 数组中。
结果:
+------+----------------------------------+
| pid | JSON_ARRAYAGG(c.name) |
+------+----------------------------------+
| 1 | ["Food", "Fruit", "Dried Fruit"] |
+------+----------------------------------+
推荐阅读
- python - 带掩码的 numpy 赋值
- google-sheets - “冻结”谷歌表格列值
- python - 使用 apply 更新 Dataframe 中的行不起作用
- c# - Unity 播放器的射击功能将不起作用
- javascript - 如何在javascript代码中执行另一个nodejs?
- azure - 尝试将数据库从弹性池复制到我的另一个 Azure 服务器时出错
- vim - 有没有办法改变快速修复列表的显示模式
- prebid.js - 由 appnexus 托管的预投标服务器放大器配置
- c++ - 未调用 NodeJS 嵌套函数的 C++ 插件
- html - 我想更改标签:检查输入复选框后的颜色