繁体   English   中英

MySQL 查询 select 连接 json 字段 ID

[英]MySQL Query select concat on json field ids

我有这两张桌子

表 1:“身份”

ID | identifier | report_ids
------------------------------
1  | TOP        | ["1","2"]

“report_ids”是一个 VARCHAR 列,而不是 JSON

表 2:“报告”

ID | name
------------------------------
1  | Report Food
2  | Report Beverage

我必须从表 Identity 中 select 并加入表 Reports 以通过他的 id 获取名称

总之,我希望通过查询得到这个结果:

Result:
ID | identifier | report_names
--------------------------------
1  | TOP        | Report Food, Report Beverage

我怎么能用 Query 做到这一点?

在此先感谢:)

寻找

SELECT i.id, i.identifier, GROUP_CONCAT(r.name)
FROM Identity i
JOIN Reports r ON LOCATE(CONCAT('"', r.id, '"'), i.report_ids)
GROUP BY i.id, i.identifier
-- WHERE JSON_VALID(i.report_ids)

接受的答案很棒。 但是,要完成,并且由于这个问题被标记为“mysql”,我想用MySQL 8.0添加解决方案(因为这与另一个问题非常相似)。

如评论中所述,可以使用JSON_TABLE ,并且使用JSON_ARRAYAGG您可以在结果中直接处理 JSON :

SELECT i.id, i.identifier, JSON_ARRAYAGG(reports.name)
FROM identity as i
    JOIN JSON_TABLE(i.report_ids, '$[*]' COLUMNS (id INT PATH '$')) AS r 
    JOIN reports ON reports.id = r.id
GROUP BY i.id, i.id, i.identifier;

结果(不确定需要哪个 ID):

+----+------------+------------------------------------+
| id | identifier | JSON_ARRAYAGG(reports.name)        |
+----+------------+------------------------------------+
|  1 | TOP        | ["Report food", "Report Beverage"] |
+----+------------+------------------------------------+

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM