mysql - 将 sql 中的多对多关系显示为 SELECT 中的列表
问题描述
我有一些看起来像这样的表:
CREATE TABLE Games (
Id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
Title VARCHAR(100) NOT NULL
);
CREATE TABLE Tags(
Id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
Tag VARCHAR(30) NOT NULL
);
CREATE TABLE GamesTags(
GameId INTEGER NOT NULL,
TagId INTEGER NOT NULL,
PRIMARY KEY (GameId, TagId),
FOREIGN KEY(GameId) REFERENCES Games(Id),
FOREIGN KEY(TagId) REFERENCES Tags(Id)
);
如何进行 SELECT 查询,该查询可以在一列中输出游戏的标题,而在另一列中输出由逗号分隔的所有标签。例子:
Title | Tags |
-----------------------------------
Fortnite | survival, action |
Super Mario | platform, adventure |
解决方案
SELECT
A.Title,
GROUP_CONCAT(DISTINCT C.Tag ORDER BY C.Tag ASC SEPARATOR ',') Tags
FROM Games A
LEFT JOIN GameTags B
ON A.Id=B.GameID
LEFT JOIN Tags C
ON B.TagId=C.Id
GROUP BY A.Title;
见识见:
推荐阅读
- c# - 封装没有 lambda 表达式的字段
- c# - 如何使用 C# 中的 zkemkeeper 库在图片框中的运行时获取指纹?
- python - 根据熊猫组比较日期
- machine-learning - TFF 联邦学习,评估方法
- ios - 自定义委托以使用 UIView 类中的 pushViewController
- css - Pdfkit python css在aws ec2服务器上没有按预期工作
- r - RMarkdown 使列表的元素在环境中可用
- r - 计算列中重复出现的值的列,重置为新值
- uitableview - 如何删除 Xamarin iOS 中每个单元格中的默认编辑图标
- ios - 轻量级问题:所有这些 Apple 首字母缩略词实际上代表什么?