2012-07-29 55 views
0

我有两个表。使用第二个表中的键将多个行合并为单独的列

用户:

int player_id 
varchar player_name 

游戏:

int game_id 
int player_id1 
int player_id2 

我想打一个查询,需要在玩家ID作为参数,并在每场比赛返回信息,沿与玩家的名字。到目前为止,我有如下:

SELECT 
    game_id, 
    player_id1, 
    player_id2, 
from GAMES, GAME_STATES 
where [email protected] or [email protected] 

我停留在部分是一个简单的办法把它与玩家ID一起返回的球员的名字。返回的查询将有5列,其中一个游戏ID,每个玩家ID两个,每个名称两个。

一个解决方案我想到的是:

SELECT 
    game_id, 
    player_id1, 
    (select player_name from USERS where player_id=player_id1) as player_name1, player_id2, 
    (select player_name from USERS where player_id=player_id2) as player_name2, 
from GAMES, GAME_STATES 
where [email protected] or [email protected] 

然而,这似乎是在数据库上很多额外的工作,因为将有2个查询每行返回。如果我必须这样做,我想知道是否在客户端上提出名称请求作为第二个查询是更好的选择?然后,客户端可以创建一个唯一ID的列表,并为它们全部执行一个查询。由于客户端和服务器位于同一个数据中心,因此我并不担心延迟。

谢谢你的帮助。

+0

我相信加入是为了,对于那些谁知道如何解释它比我更好吗? – Zoey 2012-07-29 22:26:01

回答

0

SELECT game_id, u1.player_name, u2.player_name FROM games AS game INNER JOIN users AS u1 ON y1.playerid = game.player_id1 INNER JOIN users AS u2 ON u2.playedid = game.player_id2 WHERE player_id1 = @playerid OR player_id2 = @playerid

应该做的伎俩

相关问题