基于另一个表列值的动态表连接?

时间:2013-03-03 03:55:48

标签: mysql sql left-join

我试图弄清楚是否有一种简单的方法可以根据第一个表的列值使用mysql动态加载第二个表

服务器(表1):

ID |游戏|标题

Servers_1(表2,选项1):

server_id(链接到servers.id)| game_version |球员|插件

Servers_2(表2,选项2):

server_id(链接到servers.id)| game_version |球员| mods | game_map

Servers_etc。 (表2,选项等)

试图找出如何做

之类的事情
left_join servers_[servers.game] on servers.id = servers_[servers.game].server_id

因此它会获取servers.game的值并使用它来完成表名。如果这是不可能的,那么可能是一个案例陈述,例如:

 Left_Join
   if ( servers.game == 1 ) 'servers_1'
   elseif ( servers.game == 2 ) 'servers_2'
   elseif ( servers.game == 3 ) 'servers_3'

1 个答案:

答案 0 :(得分:2)

一个选项是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中删除,因为它不再需要。取决于您的独特钥匙。

或者,您可以使用动态SQL。