MySQL子查询简化
我有两个表:MySQL子查询简化,mysql,subquery,Mysql,Subquery,我有两个表:Races和RacesTimes,我想从RacesTimes和RacesTimes中提取所有的RacesTimes和Finisher和Time,只有最好的RacesTimes。TotalTime(按限制1排序的ASC)从每个RacesTimes(来自RacesTimes的一列) 因此结果将是: Races.*,RacesTimes.Finisher,RacesTimes.Time 这是我做的: SELECT Races.*, ( SELECT
Races
和RacesTimes
,我想从RacesTimes
和RacesTimes
中提取所有的RacesTimes和Finisher
和Time
,只有最好的RacesTimes。TotalTime
(按限制1排序的ASC)从每个RacesTimes
(来自RacesTimes
的一列)
因此结果将是:
Races.*
,RacesTimes.Finisher
,RacesTimes.Time
这是我做的:
SELECT
Races.*,
(
SELECT
`TotalTime`
FROM
`RacesTimes`
WHERE
`RaceID` = Races.ID
ORDER BY
`TotalTime` ASC
LIMIT 1
) AS `BestTime`,
(
SELECT
`Time`
FROM
`RacesTimes`
WHERE
`RaceID` = Races.ID
ORDER BY
`TotalTime` ASC
LIMIT 1
) AS `BestTimeS`,
(
SELECT
`Finisher`
FROM
`RacesTimes`
WHERE
`RaceID` = Races.ID
ORDER BY
`TotalTime` ASC
LIMIT 1
) AS `BestFinisher`
FROM `Races`
它可以准确地提取所有数据,但是查询太长了,不能简化吗?我认为简化版使用了LEFT JOIN或其他类似的东西,我不知道如何使用带有JOIN的查询。这里的方法是按种族聚合比赛时间。诀窍是以最短的时间到达终点
MySQL提供了一个解决方案,通过巧妙地使用group\u concat()
和substring\u index()
group_concat()
采用按参数排序的方法,因此它可以按时间对结果排序。那么最好的终结者在第一个位置
SQL如下所示:
select r.*, rtr.mintt as TotalTime, rtr.Finisher
from Races r join
(select RaceId, MIN(TotalTime) as mintt,
substring_inde(group_concat(finisher separator ',' order by totaltime), 1) as Finisher
from RaceTimes rt
group by RaceId
) rtr
on rtr.RaceId = r.id
创建一个。那样的话,我们有更好的方法来帮助你。它仍然很长,不能更短吗?