加入SQLite以获取所需的记录

时间:2019-03-15 11:21:40

标签: sql join sqlite relational-database

我正在研究一个移动应用程序,该应用程序需要两个输入-源站名称和目标站名称。接收到这两个输入后,应用程序将列出可用于给定站点的火车的名称以及它们的source_arrival和destination_reach时序。

注意:目前,我只关注在印度西孟加拉邦运行的未预留的本地火车)

我正在使用 SQLite 作为RDBMS。我有以下三个表作为数据源-

  • train_table (其中包含可用火车的详细信息): enter image description here

  • station_table (其中包含电台的详细信息):
    enter image description here

  • route_table (其中包含路线详细信息):
    enter image description here

现在,我的目标是按照前面指定的以下方式生成输出(假设我将 Baruipur Jn 作为源,将 Sealdah 作为目标):

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 个答案:

答案 0 :(得分:1)

这可能有效,请尝试一次。

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;