mysql - 如何在 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 在 videogames.id = game-category.id_game 上加入游戏类别
网上有什么好的资源可以完全理解 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';
请注意表别名的使用,以便查询更易于编写和阅读。
推荐阅读
- android-studio - 如何在android中使用按钮关闭应用程序
- hyperledger-fabric - 无法下载最新的超级账本结构二进制文件
- jquery - 我希望文本在页面加载时同时执行一种淡入淡出和 .slideDown
- azure - 从网页调用 API 失败,但在测试页面中成功
- python - 使用 Python 将 mp4 AAC 转换为 AVC
- python - 如何使 FunctionTransformer 在 DataFrameMapper 中工作
- python - 无法在pygame中虚拟单击左右键
- r - 如何将 igraph 网络图转换为 R 中的 ggnet2?
- java - 如何从 Java 方法修复 thymeleaf 简单 System.out.print?
- c - 我有这个问题,我需要在插入排序中计算交换和比较的数量我无法让它真正准确地计算