Присоединение к SQLite для получения желаемых записей - PullRequest
1 голос
/ 15 марта 2019

Я работаю над мобильным приложением, которое принимает два входа - Имя станции-источника и Имя станции-получателя. После получения этих двух входных данных приложение затем запишет названия поездов, доступных для данных станций, вместе с их временами source_arrival и destination_reach.

( Примечание : На данный момент я сосредоточен только на незарезервированных местных поездах, которые работают в штате Западная Бенгалия, Индия)

Я использую SQLite в качестве СУБД. У меня есть следующие три таблицы в качестве источников данных -

  • train_table (в котором есть подробная информация о доступных поездах): enter image description here

  • station_table (который содержит информацию о станциях):
    enter image description here

  • route_table (который содержит детали маршрута):
    enter image description here

Теперь моя цель - произвести вывод следующим образом, как указано ранее (предположим, я дал Баруйпур Джн в качестве источника и Сеалда в качестве пункта назначения):

enter image description here

Я не могу понять, какой запрос необходим для этого. Сначала я пытался что-то вроде следующего:

    select r1.trainId, r1.arrival as SrcArrive, r2.arrival 
    as Reach  from route_table r1 cross join route_table r2 
    where r1.trainId = r2.trainId and r1.stationId <> r2.stationId and 
    r1.arrival <> r2.arrival;

(Да, без trainName )

Но я не смог сократить непреднамеренные тайминги source_arrival. Однако мне удалось получить количество различных поездов, доступных для данных двух станций, с помощью следующего:

    select _id, trainNO, trainName from train_table where _id in 
    (select trainId from route_table where stationId = 109 
    INTERSECT 
    select trainId from route_table where stationId = 21);

Но при этом я не смогу достичь нужного мне результата.

1 Ответ

1 голос
/ 16 марта 2019

Это может сработать, попробуйте один раз.

select routeData.*, train_table.* from (select r1.trainId, r1.arrival as SrcArrive, r2.arrival 
as Reach  from route_table r1 cross join route_table r2 
where r1.trainId = r2.trainId and r1.stationId <> r2.stationId and 
r1.arrival <> r2.arrival) routeData inner join train_table on routeData.trainId=train_table._id;

Я переопределил выбор из таблицы маршрутов, попробуйте этот обновленный:

select trainName, SrcArrival, Destination from (select trainData.trainName, route.* from 
(select A.trainId, A.arrival as SrcArrival, B.trainId, B.arrival as Destination from 
route_table A inner join route_table B on A.trainId=B.trainId where A.stationId=109 and 
B.stationId=259 and A.arrival<B.arrival) route inner join train_table trainData on 
route.trainId=trainData._id) order by SrcArrival, Destination;
...