我对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中的一个查询,其中表示它们是等效的查询。然而,写作感觉相当麻烦。
如果我忽略了任何信息,请告诉我。
答案 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