sql - 多对多关系 - 在多个表中显示行

标签 sql database

这里是第一个问题。

那么一点背景知识,我在开发领域还很陌生,我正在创建一个数据库优先的 MVC 应用程序,它基本上用作视频游戏及其类型的日志,供游戏玩家根据最能激发他们兴趣的流派。这需要一个多对多的关系,因为一个游戏可能被归类为多个类型,并且一个类型可以有多个游戏归类在它之下。由于它目前位于我的 SQL 数据库中,所以我有三个表 - 游戏、流派和一个链接表。链接表具有 GameID 和 GenreID 的 FK。根据我的理解(或缺乏),因为有一个链接表并且游戏表本身没有流派的实际 FK,我如何才能在每个游戏的信息页面上显示应用于每个游戏的多种流派?有没有什么我可以包含在其中一个表中的东西,一个可能有帮助的 SQL 查询,或者一旦我将我的数据库导入到 Visual Studio 中以对其余部分进行编程,我可以在 Visual Studio 中进行某种硬编码应用程序?

我的数据库看起来像:

CREATE TABLE Game 
(   
    GameID INT IDENTITY(1, 1) NOT NULL,   
    Name NVARCHAR(50) NOT NULL,   
    GameDescription NVARCHAR(200) NULL   
)

CREATE TABLE Genre 
(
    GenreID INT IDENTITY(1, 1) NOT NULL,   
    Genre NVARCHAR(20) NOT NULL   
)

CREATE TABLE GameGenre 
(
     GameGenreID INT IDENTITY(1, 1) NOT NULL,  
     FOREIGN KEY ('GameID') REFERENCES Cities('GameID'),   
     FOREIGN KEY ('GenreID') REFERENCES Cities('GenreID')   
)

提前致谢。非常感谢任何和所有建议!

最佳答案

好问题。虽然简化了,但我认为你的方法是合理的,而且很明显你已经完成了功课。

一旦您的表被适本地构建和填充,您将需要执行 SQL 语句以正确地获取您要查找的内容。

假设上面列出了三个表,如下所示:

| Game        | Genre   | GameGenre   |
|-------------|---------|-------------|
| GameID      | GenreID | GameGenreID |
| Name        | Genre   | GameID      |
| Description |         | GenreID     |

您可以通过您的 GameGenre 表(称为桥接表)“链接”它们。

因此,如果您想查看与特定游戏关联的所有类型,一些示例代码可能是:

SELECT
    Game.GameID,
    Game.Name
    GameGenre.GenreID,
    Genre.Genre

FROM
    Game
        INNER JOIN GameGenre ON Game.GameID = GameGenre.GameID
        INNER JOIN Genre ON GameGenre.GenreID = Genre.GenreID

WHERE
    Game.Name = 'Metal Gear Solid'

您正在做的是从特定游戏开始,然后使用该游戏的 ID 进入桥牌 table 。正确加入桥接表后,您就可以加入流派表以获取那里的信息。

如果您想要从一个类型开始并查看所有相关的游戏,您可以简单地反转这个过程。您将从流派开始并加入桥接表,然后从桥接表加入游戏。一些示例伪代码如下:

SELECT
    Genre.GenreID,
    Genre.Genre,
    Game.Name

FROM
    Genre
        INNER JOIN GameGenre ON Genre.GenreID = GameGenre.GenreID
        INNER JOIN Game ON GameGenre.GameID = Game.GameID

WHERE
    Genre.Genre = 'Espionage'

希望这对您有所帮助!你绝对是在正确的轨道上,我认为你在问正确的问题。如果您需要更好地理解连接,建议您从这里开始:

关于sql - 多对多关系 - 在多个表中显示行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52821712/

相关文章:

mysql - 大型网站 - 多个数据库或多个表?

sql - 未终止美元报价

mysql - phpMyAdmin INSERT 上的警告 #1366 即使使用 BEFORE INSERT TRIGGER 代码来解决它。自然的?

mysql - 尝试根据日期查找表的最大行时得到奇怪的值

MySQL连接到谷歌应用引擎实例

php - 在 session 中保存数据库排序

PHP UTF-8 搜索不工作

mysql - MySQL 关系划分(IN AND 而不是 IN OR)实现的性能差异是什么?

sql - 如何只选择满足条件的第一行?

c# - 我的数据库连接关闭了吗? (Linq to Sql)