[英]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.