【问题标题】:Joining in SQLite to get desired records加入 SQLite 以获取所需的记录
【发布时间】:2019-03-15 11:21:40
【问题描述】:

我正在开发一个需要两个输入的移动应用程序 - 源站名称和目标站名称。收到这两个输入后,应用程序将获取给定车站可用的列车名称以及它们的 source_arrival 和 destination_reach 时间。

注意:目前,我只关注在印度西孟加拉邦运营的无保留本地列车)

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

  • train_table(其中包含可用列车的详细信息):

  • station_table(包含车站的详细信息):

  • route_table(包含路线详情):

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

我无法确定为此所需的查询。最初,我正在尝试以下操作:

    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);

但是有了这个,我无法得到我需要的最终结果。

【问题讨论】:

  • route_table 结构不是我期望看到的火车路线(在世界任何地方!)。我希望此处显示的route_table 行都具有相同的_id,因为路线定义了火车并且所有车站都停止。然后(在第一个示例中)交叉连接将是on r1._id = r2.id。旁注:r1.arrival 应严格小于r2.arrival
  • use text, not images/links, for text--including tables & ERDs. 仅将图像用于无法表达为文本或增强文本的内容。无法搜索或剪切和粘贴图像。请在代码问题中给出minimal reproducible example--cut & paste & runnable code 加上所需的输出加上清晰的规范和解释。显示您可以执行哪些相关查询,并在您遇到困难时进行解释。
  • 我想我提供了所需的输出和我尝试的主要查询。我尝试以 ASCII MySQL 样式表的形式放置这些表,但无法在此处呈现它们。
  • 重新图像:从您的源中剪切或免费在线 OCR 后,粘贴到代码块中。给出 DDL 和表初始化代码——希望是表格。我解释了原因。 PS“列表”不是“征募”

标签: sql join sqlite relational-database


【解决方案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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    • 2015-10-09
    相关资源
    最近更新 更多