MySQL:如何根据其他表中的信息从多个表中提取信息?

时间:2011-01-09 20:35:28

标签: mysql join

好的,我有5个表,我需要根据一个变量提取信息。

gameinfo
id | name | platforminfoid

gamerinfo
id | name | contact | tag

platforminfo
id | name | abbreviation

rosterinfo
id | name | gameinfoid

rosters
id | gamerinfoid | rosterinfoid

1变量将是gamerinfo.id,然后将从gamerinfo中提取所有相关数据,这将从名单中提取所有相关数据,这将从rosterinfo中提取所有相关数据,这将从gameinfo中提取所有相关数据,然后从platforminfo中提取所有相关数据。

基本上它会像这样崩溃:

  • gamerinfo包含游戏玩家的基本功能 信息。
  • rosterinfo包含有关名册的基本信息 (即名单和名单的游戏 瞄准)
  • 名单包含从游戏玩家到游戏玩家的实际链接 不同的名单(游戏玩家可以参加 多个名册)
  • gameinfo包含有关游戏的基本信息(即 名称和平台)
  • 平台信息包含有关的信息 游戏的不同平台 玩过(这可能是一场比赛 在多个平台上播放)

我对涉及JOIN和UNION等的SQL查询很陌生,通常我会将其分解为多个查询,但我认为必须有更好的方法,所以在浏览网络后,我找不到(或者我可能无法理解我在看什么)我在寻找什么。如果有人能指出我正确的方向,我将非常感激。

2 个答案:

答案 0 :(得分:3)

逐步查询所需数据没有任何问题。如果在SQL超过5个表中使用JOIN,我们肯定在所有重要列上都有有用的索引。此外,这可能会产生大量重复数据:

想象一下:你需要来自gamerinfo的1条记录,可能需要3条游戏信息,4条游戏名单以及其余两张表中的3条记录。这将给你1 * 3 * 4 * 3 * 3 = 108条记录的结果,如下所示:

ID    Col2    Col3
1     1       1
1     1       2
1     1       3
1     2       1
...   ...     ...

您可以看到,即使您只需要一次,也可以获取108次ID。因此,我的建议是坚持使用单个简单的查询来获取所需的数据。

答案 1 :(得分:1)

UNION不需要多个JOIN就可以完成工作

SELECT gameinfo.id AS g_id, gameinfo.name AS g_name, platforminfoid.name AS p_name, platforminfoid.abbreviation AS p_abb, rosterinfo.name AS r_name
FROM gameinfo
LEFT JOIN platforminfo ON gameinfo.platforminfoid = platforminfo.id
LEFT JOIN rosters ON rosters.gameinfoid = gameinfo.id
LEFT JOIN rosterinfo ON rosterinfo.id = rosters.rosterinfoid

WHERE gameinfo.id = XXXX

这应该根据游戏ID提取有关游戏的所有信息 索引所有id(s)gameinfoid,platformid,rosterinfoid将有助于提高性能