如果我有一个包含多个站点的公共汽车表,并且每个站点记录都有到达时间,那么如何在最早的站点时间检索和订购公共汽车?
_______ ________
| Buses | | Stops |
|-------| |--------|
| id | | id |
| name | | bus_id |
------- | time |
--------
我可以通过以下查询来完成:
SELECT DISTINCT sub.id, sub.name
FROM
(SELECT buses.*, stops.time
FROM buses
INNER JOIN stops ON stops.bus_id = buses.id
ORDER BY stops.time) AS sub;
…但这样做的缺点是必须执行2个查询,并且必须在SELECT DISTINCT子句中指定总线中的所有字段。如果公车表发生变化,那就特别烦人了。
我想做的是:
SELECT DISTINCT buses.*
FROM buses
INNER JOIN stops ON stops.bus_id = buses.id
ORDER BY stops.time;
……然而,为了得到
DISTINCT buses.*
,我还必须包括stops.time
,这给了我不同停车时间的重复公共汽车。做这个查询最好的方法是什么?
最佳答案
您可以做的一件事是将内部查询放入ORDER BY
。这将保持外部查询“干净”,因为它将只从总线中选择。这样就不需要返回任何其他字段。
SELECT buses.*
FROM buses
ORDER BY (
SELECT MIN(stops.time) FROM stops WHERE stops.bus_id = buses.id
)