【问题标题】:Display a many to many relation in sql as list in SELECT将 sql 中的多对多关系显示为 SELECT 中的列表
【发布时间】:2018-06-13 18:56:17
【问题描述】:

我有一些看起来像这样的表格:

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 |

【问题讨论】:

  • 使用joingroup_concat查找...
  • 这是一个演示问题,因此如果有的话,您应该在应用层将它们组合在一起。

标签: mysql sql database select tags


【解决方案1】:
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 Group By

MySQL Join Made Easy For Beginners

MySQL GROUP_CONCAT Function

【讨论】:

    猜你喜欢
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多