首页 > 解决方案 > 如何在 MySQL 中查询数据透视表数据(多对多关系)

问题描述

我正在做一个小项目,其中我的视频游戏可能属于多个类别/类型(视频游戏可以属于 RPG 和射击游戏类别)。我希望能够获得属于特定类别的所有游戏,比如说所有 RPG 视频游戏。我创建了 3 个表:视频游戏、类别、游戏类别。

 1. videogames table
 --------------------------
| id | name | price | date |
|----|------|-------|------|

 2. categories table
 ---------------
| id | category | 
|----|----------|

 3. game-category table
 -----------------------
| id_game | id_category | 
|---------|-------------|

鉴于这 3 个表及其列,如果我想获取所有属于RPG类别的游戏,我应该如何制定查询?我尝试了几个查询,都类似于下面的这个,但我得到了错误。

从 videogames 中选择 DISTINCT videogames.name、videogames.id、category.name、category.id 在 vi​​deogames.id = game-category.id_game 上加入游戏类别

网上有什么好的资源可以完全理解 SQL 语法和 JOIN 吗?

标签: mysqlsqldatabasejoin

解决方案


你基本上是在正确的道路上。您没有加入categories表格,您需要一个过滤器:

SELECT vg.name, vg.id, c.name, c.id
FROM videogames vg JOIN
     game_category gc
     ON vg.id = gc.id_game JOIN 
     categories c
     ON c.id = gc.id_category
WHERE c.name = 'RPG';

请注意表别名的使用,以便查询更易于编写和阅读。


推荐阅读