2

我有火车、火车时刻表、火车号的mysql数据库。

现在我想查询斋浦尔到焦特布尔两个车站之间的火车,所以我这样查询

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'

它给出了正确的结果,但它显示了焦特布尔到斋浦尔和斋浦尔到焦特布尔的火车,所以结果变成了火车的两倍。

我想查询仅从斋浦尔到焦特布尔的火车,而不是从焦特布尔到斋浦尔的火车。如果我选择日期,则必须从火车数据库中找到匹配的火车。

4

2 回答 2

1

您不是在查询火车表,而是查询火车时刻表表,这意味着查询不会给您 2 列火车,而是给您 2 列火车时刻表。

我会从 trains 表中开始 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 代码)

于 2013-04-12T17:34:00.413 回答
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'
         ;

否则,您的结果集将填充不需要的身份匹配(代表从一个车站到其本身的虚构火车部分)。

于 2013-04-12T17:46:26.613 回答