我要寻找的是特定比赛最快的单圈时间,这将通过使用比赛名称和比赛日期来确定。
SELECT lapName AS Name, lapDate AS Date, T
FROM Lap
INNER JOIN Race ON Lap.lapName = Race.Name
AND Lap.lapDate = Race.Date
GROUP BY Date;
它目前仅显示3个不同的比赛名称,带有4个不同的日期,这意味着我总共有4个组合,而实际上有9个唯一的比赛名称,比赛日期组合。
唯一的比赛数据存储在“比赛”表中。间隔时间存储在LapInfo表中。
我也收到有关我的团体声明的警告,说该声明虽然仍在运行,但仍然模棱两可。
答案 0 :(得分:2)
您似乎不需要join
:
SELECT l.lapRaceName, l.lapRaceDate,
MIN(l.lapTime)
FROM LapInfo l
GROUP BY l.lapRaceName, l.lapRaceDate;
如果您不需要JOIN
,则在查询中放入一个是多余的。
答案 1 :(得分:1)
首先,您的查询实际上是无效的SQL。您需要使用MIN
函数来获得最快的lapTime
。另外,您必须GROUP BY lapRaceName, raceDate
而不是lapRaceName
。不幸的是,在这种情况下,mysql不够宽松,可以执行它而不会出错。
此外,您将LapInfo
与Race
进行联接,并从LapInfo
返回j联接的列,这些列是您在Race
中可以找到的别名。从SQL的角度来看,这是可以的,但是这也非常复杂:直接返回Race
表中的列,因为它们具有您要查找的名称。
最后,最好指出每列属于哪个表。在这里,列lapTime
属于表LapInfo
,因此我们将其明确。
查询:
SELECT
Race.raceName,
Race.raceDate,
MIN(LapInfo.lapTime)
FROM
Race
INNER JOIN LapInfo
ON LapInfo.lapRaceName = Race.raceName
AND LapInfo.lapRaceDate = Race.raceDate
GROUP BY
Race.raceName,
Race.raceDate
;