首页 > 解决方案 > 将 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 |

标签: mysqlsqldatabaseselecttags

解决方案


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

MySQL GROUP_CONCAT 函数


推荐阅读