使用复合键在INNER JOIN中使用的问题

时间:2014-03-05 14:43:43

标签: mysql sql join

我对SQL很新,非常新(事实上今天学习!)如何使用JOINS或特别是INNER JOIN。我已经阅读了一些指南,但是当有一个带有复合键的表时,没有看到任何有用的信息。

表:

Matches

+-----------+------------+
| (MatchID) | StartTime  |
+-----------+------------+
| 548576804 | 1393965361 |
| 548494906 | 1393123251 |
+-----------+------------+

+-----------------------------------+---------+
| (PlayerID)    -     (MatchID)    |   Result |
+-----------------------------------+---------+
| 38440257            548576804    |   Win    |
| 17164642            548494906    |   Loss   |
+-----------------------------------+---------+

在上表中,表MatchID中的Matches是外键。

问题

括号中的列是Keys(因此复合键位于MatchDetails表中)。我试图从播放器38440257播放所有匹配,并从匹配表中拉出StartTime。我尝试过的第一个加入,无论玩家如何,它都会拉动每一场比赛:

SELECT matchdetails.MatchID,
       matches.StartTime,
       matchdetails.Result
FROM matchdetails,
     matches
WHERE matchdetails.MatchID = matches.MatchID
ORDER BY matches.StartTime ASC

现在,我不确定如何在查询中添加来自特定playerID的匹配。因为以下内容不起作用:

SELECT matchdetails.MatchID,
       matches.StartTime,
       matchdetails.Result
FROM matchdetails,
     matches
WHERE matchdetails.MatchID = matches.MatchID,
      matchdetails.PlayerID=76561197998705985
ORDER BY matches.StartTime ASC

另外,我上面使用的JOIN是否有更简单的方式来编写我错过的内容?或者我根本不写一个加入?我跟踪了here中的一个查询,其中表示它们是等效的查询。然而,写作感觉相当麻烦。

如果我忽略了任何信息,请告诉我。

2 个答案:

答案 0 :(得分:4)

您的谓词之间只需要AND

SELECT matchdetails.MatchID,
       matches.StartTime,
       matchdetails.Result
FROM matchdetails,
     matches
WHERE matchdetails.MatchID = matches.MatchID
      AND matchdetails.PlayerID=76561197998705985
ORDER BY matches.StartTime ASC;

但是,我强烈建议您move away from the ANSI 89 JOIN syntax并采用ANSI 92代替。顾名思义,您使用的语法已超过20年。

SELECT matchdetails.MatchID,
       matches.StartTime,
       matchdetails.Result
FROM matchdetails
     INNER JOIN matches
        ON matchdetails.MatchID = matches.MatchID
WHERE matchdetails.PlayerID=76561197998705985
ORDER BY matches.StartTime ASC;

答案 1 :(得分:0)

SELECT matchdetails.MatchID,
       matches.StartTime,
       matchdetails.Result
FROM matchdetails 
     JOIN ON matchdetails.MatchID = matches.MatchID
WHERE
      matchdetails.PlayerID=76561197998705985
ORDER BY matches.StartTime ASC