我有三张桌子

Racer( racerID, racerName)
Race (raceID, raceName)
RaceJoinRacer(raceID, racersID)

我不知道sql语句将检索哪个“racer”参加了哪个“race”。
这就是我目前所拥有的:
SELECT racerName, raceName
FROM Racer, Race
JOIN RaceJoinRacer
    ON RaceJoinRacer.raceID= Race.raceID

最佳答案

您正在混合隐式和显式连接语法。不要在FROM子句中使用逗号。相反,使用两个JOIN语句,这意味着MySQL中有INNER JOIN语句。

SELECT
  racerName,
  raceName
FROM
  Race
  JOIN RaceJoinRacer ON RaceJoinRacer.raceID = Race.raceID
  JOIN Racer ON RaceJoinRacer.racersID = Racer.racerID

如果您想包括未参加任何比赛的Racer表中的赛车手,请在LEFT JOINRacer之间使用RaceJoinRacer
SELECT
  racerName,
  raceName
FROM
  Racer
  LEFT JOIN Racer ON RaceJoinRacer.racersID = Racer.racerID
  JOIN RaceJoinRacer ON RaceJoinRacer.raceID = Race.raceID

10-05 19:10