好的,我有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中提取所有相关数据。
基本上它会像这样崩溃:
我对涉及JOIN和UNION等的SQL查询很陌生,通常我会将其分解为多个查询,但我认为必须有更好的方法,所以在浏览网络后,我找不到(或者我可能无法理解我在看什么)我在寻找什么。如果有人能指出我正确的方向,我将非常感激。
答案 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将有助于提高性能