在sql中显示多对多关系作为select中的列表

gtlvzcf8  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(337)

我有一些table是这样的:

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 |
d6kp6zgx

d6kp6zgx1#

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;

有关详细信息,请参阅:
mysql分组依据
mysql join为初学者提供了方便
mysql group\u concat函数

相关问题