查询具有多个值的多列但在具有相同列的不同表中

时间:2015-05-16 15:11:16

标签: mysql sql inner-join

我知道标题不明白。但我不知道如何更好地定义它。

我会解释更多我的问题。

我有2张桌子。其内部具有以下值:

名表:战斗

 res1 res2 winner
    225 552 552

在第二张表中我有:

名表:战士

ID  name
225 example 1
552 example 2

ID和res 1 res2获胜者也是一样。

我应该如何构建表格,以便显示名称而不是ID?

通常情况下,我总是使用内连接,但我没有发现自己有更多值到同一个字符串。

感谢您的回复。

3 个答案:

答案 0 :(得分:0)

你会多次加入。这对初学者来说很棘手,因为它需要表别名:

select f1.name as name1, f2.name as name2, fw.name as winner
from battle b join
     fighters f1
     on b.res1 = f1.id join
     fighters f2
     on b.res2 = f2.id join
     fighters fw
     on b.winner = fw.id;

答案 1 :(得分:0)

你需要有三个表战士别名来获得所需的输出。请参阅以下查询:

Select f1.name as Fighter-1, 
       f2.name as Fighter-2, 
       f3.name as Winner
From 
       battel b,
       fighters f1,
       fighters f2,
       fighters f3
Where
       b.res1 = f1.id AND
       b.res2 = f2.id AND
       b.winner = f3.id AND 
       (f1.id = 225 OR f2.id=225)      

希望这有帮助!

答案 2 :(得分:0)

没有必要进行三次加入,因为获胜者永远是两个对手之一,所以你只需要做一个案例:

res1 res2 winner
 225  552      2

为了避免插入或更新未参与此游戏的获胜者的任何潜在问题,您可以将获胜者编号更改为一个简单的标记(1或2),表明谁赢了:

         temp=A[j+1];  // stores A[j+1] in temp
         A[j]=A[j+1];  // stores A[j+1] in A[j] - the value in A[j] is lost
         A[j]=temp;    // stores temp in A[j]