我有多个JOINS这种棘手的情况,我有点卡住了。让我详细说明。
我有这些表格:
种族
<div class='title'>
<p>Jordan Matthews</p>
</div>
RACERS
id | system_id | track | race_name | race_date
----------------------------------------------
1 | 3 | Track1| Name | 2016-10-07
2 | 5 | Track1| Name | 2016-10-08
3 | 6 | Track1| Name | 2016-10-09
RACERS_RACES
id | system_id | racer_name | gender | bday | from | laps_completed
------------------------------------------------------------------------
1 | 10002 | Name1 | 1 | 1996-10-07|Place | 14
2 | 10003 | Name2 | 0 | 1996-10-08|Place2| 33
3 | 10004 | Name3 | 1 | 1996-10-09|Place3| 44
LAPS
id | race_id | racer_id
-----------------------
1 | 3 | 10002
2 | 5 | 10004
3 | 6 | 10003
我尝试过这样的查询:
id | lap_time | system_id | racer_id
------------------------------------
1 | 25.33 | 1 | 10002
2 | 23.11 | 3 | 10003
3 | 28.55 | 7 | 10004
我的问题是,当我有多个赛车手时,我在不同的比赛中拥有相同的最快圈速,并且不应该那样。它应该让我在某场比赛中获得最快圈速。
以下是sqlfiddle链接。
答案 0 :(得分:1)
MIN和&#34;双组由&#34;不是问题所在。
看起来你错过了一个连接条件。看起来laps
的加入应该包含与特定races
的匹配。我只看到给定racers
的连接条件。
如果race_id
中有laps
列,那么就像这样:
...
LEFT JOIN laps l
ON l.racer_id = ra.system_id
AND l.race_id = rr.race_id
WHERE l.lap_time != 0
...
对我来说,看起来我们真的希望从laps
加入到racers_races
表。单圈时间并不取决于赛车......这取决于赛车和比赛......赛车手参加比赛。
如果无法将laps
与racers_races
中的特定行匹配,那么架构就会出现问题。
另一种可能性(当然)是架构是正确的。并且查询将返回竞赛的最快圈数,因此对于每个racers
,查询将返回给定races
的相同最快时间。
另请注意,WHERE子句中的条件否定了LEFT JOIN的外部性。如果你真的希望那是一个&#34;外部&#34;加入,然后将该条件移动到ON
子句
...
LEFT JOIN laps l
ON l.racer_id = ra.system_id
AND l.<race_id> = rr.race_id
AND l.lap_time != 0
WHERE 1=1
...