Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用复合键时使用内部联接的问题_Mysql_Sql_Join - Fatal编程技术网

Mysql 使用复合键时使用内部联接的问题

Mysql 使用复合键时使用内部联接的问题,mysql,sql,join,Mysql,Sql,Join,我对SQL非常陌生,而且非常新(事实上,今天我正在学习!)如何使用连接,尤其是内部连接。我已经阅读了一些指南,但还没有看到关于何时有一个带有复合键的表的任何有用信息 桌子: 及 在上述表格中,表格Matches中的MatchID是外键 问题 括号中的列是键(因此复合键位于MatchDetails表中)。我正在尝试从比赛表中提取球员38440257的所有比赛和开始时间。我尝试的第一次加入成功了,但无论是哪位玩家,它都能吸引每一场比赛: SELECT matchdetails.MatchID,

我对SQL非常陌生,而且非常新(事实上,今天我正在学习!)如何使用连接,尤其是内部连接。我已经阅读了一些指南,但还没有看到关于何时有一个带有复合键的表的任何有用信息

桌子: 及

在上述表格中,表格
Matches
中的
MatchID
是外键

问题 括号中的列是键(因此复合键位于MatchDetails表中)。我正在尝试从比赛表中提取球员38440257的所有比赛和开始时间。我尝试的第一次加入成功了,但无论是哪位玩家,它都能吸引每一场比赛:

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
此外,我在上面使用的连接,有没有更简单的方法来编写我缺少的连接?或者我根本就没有写连接?我跟踪了来自的一个查询,其中说明它们是等价的查询。然而,写起来感觉相当麻烦


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

您只需要在谓词之间使用

SELECT matchdetails.MatchID,
       matches.StartTime,
       matchdetails.Result
FROM matchdetails,
     matches
WHERE matchdetails.MatchID = matches.MatchID
      AND matchdetails.PlayerID=76561197998705985
ORDER BY matches.StartTime ASC;
但是,我强烈建议您采用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;

您只需要在谓词之间使用

SELECT matchdetails.MatchID,
       matches.StartTime,
       matchdetails.Result
FROM matchdetails,
     matches
WHERE matchdetails.MatchID = matches.MatchID
      AND matchdetails.PlayerID=76561197998705985
ORDER BY matches.StartTime ASC;
但是,我强烈建议您采用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;

非工作部分是否返回错误或不正确的数据?非工作部分是否返回错误或不正确的数据?感谢您简洁的回答。我确实认为我的JOIN查询有一些不太正确的地方,但我不确定它是什么,也不知道如何找出问题所在。我会换到更新的版本,并仔细阅读!谢谢你简洁的答复。我确实认为我的JOIN查询有一些不太正确的地方,但我不确定它是什么,也不知道如何找出问题所在。我会换到更新的版本,并仔细阅读!
SELECT matchdetails.MatchID,
       matches.StartTime,
       matchdetails.Result
FROM matchdetails 
     JOIN ON matchdetails.MatchID = matches.MatchID
WHERE
      matchdetails.PlayerID=76561197998705985
ORDER BY matches.StartTime ASC