У меня есть 3 таблицы:Сравнение различных строк в SQL
Section (id, origin, destination, departure_time, arrival_time)
1 - city1 - city2 - 2017-01-01 10:00:00 - 2017-01-01 12:00:00
2 - city2 - city3 - 2017-01-01 12:00:00 - 2017-01-01 13:00:00
3 - city3 - city4 - 2017-01-01 13:00:00 - 2017-01-01 15:00:00
4 - city4 - city5 - 2017-01-01 15:00:00 - 2017-01-01 16:30:00
Trip_Section(trip_id, section_id)
1 - 1
1 - 2
1 - 3
1 - 4
Trip(id, from, to, departure_time)
1 - city1 - city5 - 2017-01-01 10:00:00
Таблица разделы содержат все остановки от поездки, и мне нужно найти все поездки, которые содержат происхождение и назначение запрашивало. В этой части я пытаюсь восстановить поездки с параметрами в разных разделах. Например: я хочу путешествовать с City2 в City4 так что мой запрос:
select ts.trip_id, count(ts.trip_id) >= 2 from Section as s
inner join Trip_Section ts on ts.sections_id = s.id
where (s.origin = 'city2' OR s.destination = 'city4')
GROUP BY ts.trip_id having count(ts.trip_id) >= 2;
и результат является правильным, но если я поиск от City4 к City2, результат не является пустым, то же самое, чем первый случай.
Как я могу сравнить разные строки, чтобы возвращать только строки, когда время начала отправления будет меньше, чем время отправления отправления (или другая возможность проверить идентификатор назначения больше, чем id источника). Может кто-нибудь мне помочь?
«и правильный результат» - Как это возможно с синтаксической ошибки в запросе? Вероятно, вы имеете в виду 'OR s.destination = 'city4''. –
И s.arrival_time> s.departure_time? – Stv
Я не понимаю - вы не показываете столбцы с именем 'origin_id' или' destination_id' в своей модели данных - как этот sql запускается вообще? – Hogan