【发布时间】:2014-08-08 10:23:58
【问题描述】:
SELECT journey.departure AS startTime, departure.duration AS seconds, ADDTIME(journey.departure, departure.duration) AS departureTime, p.section
FROM journey
JOIN journey_day ON journey_day.journey = journey.id
JOIN pattern p ON p.id = journey.pattern
JOIN (
SELECT departure.section, SEC_TO_TIME(SUM(time)) AS duration
FROM pattern_link departure
WHERE departure.from_sequence < (SELECT from_sequence FROM pattern_link WHERE from_stop = "1980SN12532B" AND section = departure.section)
GROUP BY departure.section
) departure ON departure.section = p.section
WHERE journey.service = "44-A-A-y10-1" AND p.direction = "inbound" AND journey_day.day = 4
GROUP BY journey.id
ORDER BY departure
这个查询需要很长时间才能运行。这是因为JOIN 子查询内的WHERE 子句中的子查询。问题是,我不知道该怎么写。在离开连接的WHERE 语句中,我需要知道from_sequence 数字(基本上是一个ID),我能做到这一点的唯一方法是根据WHERE 子句中的条件进行查询。
有什么想法吗?
【问题讨论】:
-
在join子查询中使用join而不是子查询?? pattern_link 和 pattern_link_departure 之间有什么关系吗?
-
@Torrezzzz 我试试看,不知道你说的 pattern_link_departure 是什么意思,如果你再看一遍,你会发现离开只是 pattern_link 表的别名
-
我的错误没有注意到...使用 join 它可能会稍微加快查询...。
标签: mysql sql join optimization subquery