我有火车数据库,火车时刻表,列车编号。
现在我想查询斋浦尔到焦特布尔两个车站之间的火车,所以我这样查询
SELECT distinct d1.train_no
FROM train_schedule d1
INNER JOIN train_schedule d2 ON d2.train_no=d1.train_no
WHERE d1.stn_code = 'JU' and d2.stn_code = 'JP'
它给出了正确的结果,但它显示焦特布尔到斋浦尔和斋浦尔到焦特布尔列车,所以结果变成了火车的两倍。
我想查询从斋浦尔到焦特布尔而不是焦特布尔到斋浦尔的火车。如果我选择日期,则必须从列车数据库中找到匹配的列车。
答案 0 :(得分:1)
你不是在查询火车表,而是火车时刻表,这意味着查询没有给你2列火车,它给你2个火车时刻表。
我从火车表开始选择SELECT,如下:
SELECT trains.train_number, count(*) as "Number of schedules"
FROM trains
INNER JOIN train_schedule a USING (train_number) WHERE train_schedule.station_code = 'JU'
INNER JOIN train_schedule b USING (train_number) WHERE train_schedule.station_code = 'JP'
(伪MySQL代码)
答案 1 :(得分:1)
确保您加入不同的记录:
SELECT distinct d1.train_no
FROM train_schedule d1
INNER JOIN train_schedule d2 ON ( d2.train_no = d1.train_no
AND d2.stn_code <> d1.stn_code )
WHERE d1.stn_code = 'JU'
AND d2.stn_code = 'JP'
;
否则您的结果集将填充不需要的身份匹配(表示从一个站到自身的虚构火车部分)。