我有多个JOINS时遇到这种棘手的情况,有点卡住。让我详细说明。

我有这些表:

种族

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


赛车

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


RACERS_RACES

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


我试图做这个查询:

    SELECT r.system_id,MIN(l.lap_time) as fastest_lap,ra.racer_name,ra.racer_from,r.race_name,ra.laps_completed,r.race_date
FROM races r
LEFT JOIN racers_races rr ON r.system_id=rr.race_id
LEFT JOIN racers ra ON rr.racer_id=ra.system_id
LEFT JOIN laps l ON ra.system_id=l.racer_id
WHERE l.lap_time!=0
GROUP BY r.system_id,l.racer_id
ORDER BY l.lap_time ASCenter code here


我的问题是,当我有多个赛车手时,我在不同比赛中拥有相同的最快圈速,这不应该是那样。它应该让我在某个比赛中获得最快的圈速。

这是一个sqlfiddle链接。

最佳答案

MIN和“ double group by”不是问题。

看来您缺少联接条件。看来,与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表。单圈时间不取决于赛车手...它取决于赛车手和比赛...赛车手参与比赛。

如果无法将lapsracers_races中的特定行进行匹配,则说明模式存在问题。

(当然)另一种可能性是该模式是正确的。而且查询只是返回赛车的最快圈速,因此对于每个racers,查询将为给定的races返回相同的最快时间。



还要注意,WHERE子句中的条件否定了LEFT JOIN的外部性。如果您确实希望将其作为“外部”联接,则将该条件移到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
  ...

关于mysql - 使用双GROUP BY时获取MIN(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41558226/

10-12 20:08