MySQL сообщает, нет ли обратного маршрута поездок на поезде, чтобы начать с прибывшей станции

#mysql #sql

#mysql #sql

Вопрос:

Найдите станции, которые являются началом маршрута к другой станции, но не местом назначения любого маршрута с другой станции.

Пытаюсь напечатать названия железнодорожных станций в Японии, которые являются началом маршрута на другую станцию без дубликатов и упорядочены в алфавитном порядке, но не указывают пункт назначения любого маршрута с этой другой железнодорожной станции. Итак, если маршрут 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 в качестве маршрута. Поездка туда и обратно между Токио Гранд и Нагасаки не мешает тому, чтобы Токио Гранд был указан в качестве отправной точки без обратных поездок к нему.

Таким образом, конечный результат возвращает только уникальные названия станций, которые соответствуют этому условию и упорядочены в алфавитном порядке. На основе этих данных кажется, что stations.id , train_routes.start_station_id, routes.end_station_id и stations.country являются единственными релевантными элементами для этой проблемы. Имя менеджера, часовой пояс, количество сотрудников и дата последней поездки не имеют значения.

Таким образом, процесс, похоже, проверяет, не существует ли обратной поездки от пройденной до станции на основе идентификаторов, отфильтрованных на станциях Японии. Добавьте начальную станцию, если у нее нет обратного пути от пройденной до станции. Затем добавьте замену идентификаторов на названия станций.

Комментарии:

1. Я нахожу это требование трудным для понимания. Чтобы было понятнее, я бы предложил следующее. 1) Предоставьте нам пример таблицы train_routes, содержащую, возможно, 10 строк данных. 2) Сообщите нам идентификатор станции, которая должна появиться в результатах, и объясните, почему она должна появиться. 3) Сообщите нам идентификатор станции, которая не должна отображаться в результатах, и объясните, почему она не должна отображаться.

2. Обновлена таблица с примером и объяснением

Ответ №1:

Я думаю, это должно сработать:

 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