db有4个表,下面是每个表定义和一些样本数据。
停止时间(这代表特定行程中某条公共汽车的特定'停止)
trip_id arrival_time departure_time stop_id stop_sequence
1 06:54:00 06:54:00 9400ZZMAABM1 0001
1 06:56:00 06:56:00 9400ZZMACRU1 0002
1 06:58:00 06:58:00 9400ZZMABOW1 0003
1 07:00:00 07:00:00 9400ZZMAHEA1 0004
1 07:02:00 07:02:00 9400ZZMAPWC1 0005
路线(这代表路线)
route_id route_short_name route_long_name
MET:MET2:I: 42 ALTRINCHAM - MANCHESTER - BURY
MET:MET2:O: 42 BURY - MANCHESTER - ALTRINCHAM
旅行(这代表一次特定的公共汽车旅行)
route_id trip_id trip_headsign
MET:MET2:I: 1 "Bury To Manchester"
MET:MET2:I: 2 "Manchester To Bury"
停止(这代表一个公共汽车站)
stop_id stop_code stop_name
0600MA0001 chegptg "Broken Cross, Fallibroome Road (cnr)"
0600MA0050 chegtjm "Macclesfield, opp Tesco"
0600MA0166 chemjat "Knutsford, Sugar Pit Lane (cnr)"
我希望获得给定路线的所有停靠点。要做到这一点似乎我必须加入路线,旅行,停靠和停止时间的数据,但我无法做到正确。这是我试过的查询:
SELECT
routes.route_id,
routes.route_short_name,
trips.trip_id,
stops.stop_id,
stops.stop_name
FROM routes
INNER JOIN trips ON routes.route_id=trips.route_id
INNER JOIN stops ON stop_times.stop_id=stops.stop_id
WHERE routes.route_short_name='42';
答案 0 :(得分:1)
您的联接使用stop_times
,但这不在from
子句中。你需要所有四个表:
SELECT r.route_id, r.route_short_name, t.trip_id, s.stop_id, s.stop_name
FROM routes r INNER JOIN
trips t
ON r.route_id = t.route_id INNER JOIN
stop_times st
ON st.trip_id = t.trip_id INNER JOIN
stops s
on st.stop_id = s.stop_id
WHERE r.route_short_name='42';
答案 1 :(得分:1)
我相信这对你有用
SELECT
DISTINCT(s.stop_id),
s.stop_name,
r.route_short_name
FROM stops s
INNER JOIN stop_times st ON st.stop_id = s.stop_id
INNER JOIN trips t ON t.trip_id = st.trip_id
INNER JOIN routes r ON r.route_id=t.route_id
WHERE r.route_short_name='42'
GROUP BY s.stop_id;
你试图从一个不同的表ID中加入一个表,但这个表并不起作用。你首先必须加入stop_times进行旅行,然后加入stop到stop_times,这样你的id就可以匹配,并且每次相应的行程都有止损。