首页 > 解决方案 > MySQL告诉如果没有火车旅行路线返回从到达站开始

问题描述

查找作为通往另一个车站的路线起点的车站,但不是来自其他车站的任何路线的目的地。

尝试打印日本的火车站名称,这些名称是通往另一个车站的路线的起点,没有重复并按字母顺序排列,但不是从该其他火车站出发的任何路线的目的地。因此,如果路由 1->2 存在而 3->1 不存在,则无论 1 上是否存在往返(例如 1->2 和 2->1),1 仍被视为结果的一部分。

数据库设置为:

TABLE = Stations
id|name_station |country|manager_name|time_zone  |number_of_employees
1 | Tokyo Grand | Japan | Satoshi    | Japan Time| 500
2 | Nagasaki    |Japan  | Hirohito   | Japan Time| 345
3 | Tokyo suburb|Japan  | Kiki.      | Japan Time| 344



  TABLE = train_routes
start_station_id| end_station_id | date_of_last_trip
      1         |      3         | 07.20.2020
      1         |      2         | 07.21.2020
      2         |      1         | 07.21.2020

根据此表,我们将 Tokyo Grand 包含在最终结果中,因为它有一条到东京郊区的路线,但没有从东京郊区返回东京盛大的路线作为路线。Tokyo Grand 和长崎之间的往返行程并没有阻止 Tokyo Grand 被列为起点,没有回程。

所以最终结果是只返回遵循此条件并按字母顺序组织的站点的唯一站点名称。根据这些数据,似乎 station.id、train_routes.start_station_id、routes.end_station_id 和stations.country 是与此问题相关的唯一项目。经理姓名、时区、员工人数和上次旅行的日期无关紧要。

因此,该过程似乎是根据从日本国家车站过滤掉的 id 来查看是否不存在从旅行到车站的回程。如果从已到达的站点没有回程,则添加起始站点。然后添加将 id 替换为站点名称。

标签: mysqlsql

解决方案


我认为应该这样做:

select distinct
    s1.name_station
from
    train_routes r1
inner join
    Stations s1
on
    r1.start_station_id = s1.id
left outer join
    train_routes r2
on
    r1.start_station_id = r2.end_station_id
    and r1.end_station_id = r2.start_station_id
where
    r2.end_station_id is null
    and s1.country = 'Japan'
order by
    s1.name_station

推荐阅读