我想弄清楚是否有一种简单的方法可以使用 mysql 根据第一个表的列值动态加载第二个表
服务器(表 1):
编号 |游戏 |标题
Servers_1(表 2,选项 1):
server_id(链接到 servers.id)|游戏版本 |球员 |插件
Servers_2(表 2,选项 2):
server_id(链接到 servers.id)|游戏版本 |球员 |模组 |游戏 map
服务器等。 (表2,选项等)
试图找出如何做类似的事情
left_join servers_[servers.game] on servers.id = servers_[servers.game].server_id
所以它会获取 servers.game 的值并使用它来完成表名。如果这不可能,则可以使用 case 语句,例如:
Left_Join
if ( servers.game == 1 ) 'servers_1'
elseif ( servers.game == 2 ) 'servers_2'
elseif ( servers.game == 3 ) 'servers_3'
最佳答案
一种选择是LEFT JOIN
每个表并使用CASE
语句返回适当的数据。
像这样的东西应该可以帮助你开始:
SELECT S.Id, S.Game, S.Title,
CASE S.Game
WHEN 1 THEN S1.game_version
WHEN 2 THEN S2.game_version
END game_version,
...
FROM Servers S
LEFT JOIN Servers_1 S1 ON S.id = S1.Server_Id AND S.Game = 1
LEFT JOIN Servers_2 S2 ON S.id = S2.Server_Id AND S.Game = 2
不使用 CASE
,您可以只使用 COALESCE
,因为每个 Id/Game 都应该是唯一的,并且只有 1 个不会为 NULL:
SELECT COALESCE(S1.game_version,S2.game_version,...) game_version
如果同一个服务器 ID 无法出现在多个表中,那么您可以将 AND S.Game... 排除在 LEFT JOIN 之外,因为不再需要它。取决于您的唯一 key 。
或者,您可以使用动态 SQL。
关于mysql - 基于另一个表列值的动态表连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15182300/