【发布时间】:2014-03-05 23:44:55
【问题描述】:
我对 SQL 非常陌生,而且非常新(实际上是今天学习!)如何使用 JOINS,尤其是 INNER JOIN。我已经阅读了一些指南,但没有看到任何有用的信息来说明何时有一个包含复合键的表。
表格:
Matches
+-----------+------------+
| (MatchID) | StartTime |
+-----------+------------+
| 548576804 | 1393965361 |
| 548494906 | 1393123251 |
+-----------+------------+
和
+-----------------------------------+---------+
| (PlayerID) - (MatchID) | Result |
+-----------------------------------+---------+
| 38440257 548576804 | Win |
| 17164642 548494906 | Loss |
+-----------------------------------+---------+
在上述表中,Matches 表中的MatchID 是外键。
问题
括号中的列是键(因此复合键在 MatchDetails 表中)。我正在尝试从 Matches 表中提取玩家 38440257 播放的所有比赛以及 StartTime。我尝试的第一个 Join 成功了,但是不管玩家是谁,它都会拉动每一场比赛:
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 的查询之一,该查询表明它们是等效查询。不过感觉写起来比较麻烦。
如果我忽略了任何信息,请告诉我。
【问题讨论】:
-
非工作部分是否返回错误或不正确的数据?