我在 mysql 表中有这些行
id categoryNameSp categoryNameEn
1 Comida Food
2 Fruta Fruit
3 Fruta Seca Dried fruit
Run Code Online (Sandbox Code Playgroud)
然后我在另一个表中有这一行
pid path
1 ["1", "2", "3"]
Run Code Online (Sandbox Code Playgroud)
我想返回路径,但我想返回categoryNameEn而不是数字,因此返回将是:
pid path
1 ["Food","Fruit", "Dried fruit"]
Run Code Online (Sandbox Code Playgroud)
这需要使用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"]');
Run Code Online (Sandbox Code Playgroud)
然后我们可以执行以下(奇特的)查询:
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;
Run Code Online (Sandbox Code Playgroud)
这个想法是根据表中的 JSON 数据创建一个表stuff。然后,我们将其与类别表连接起来,并将结果聚合到 JSON 数组中。
结果:
+------+----------------------------------+
| pid | JSON_ARRAYAGG(c.name) |
+------+----------------------------------+
| 1 | ["Food", "Fruit", "Dried Fruit"] |
+------+----------------------------------+
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3730 次 |
| 最近记录: |