如何在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类别的所有游戏,我应该如何制定查询?我尝试了几个查询,都与下面的这个类似,但都出现了错误。

SELECT DISTINCT videogames.name,videogames.id,categories.name,categories.idFROM视频游戏在videogames.id=game-category.id_came上加入游戏类别在categories上加入游戏类别。id=game-category.id_category

有什么好的在线资源可以完全理解SQL语法和JOIN吗

您基本上走上了正确的道路。您没有引入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';

请注意表别名的使用,这样查询更易于编写和读取。

最新更新