首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL数据库,获取条件不断变化的数据

SQL数据库,获取条件不断变化的数据
EN

Stack Overflow用户
提问于 2019-08-10 18:45:59
回答 1查看 46关注 0票数 0

我构建了一个摆渡系统,我有三个表,分别是PortsRoutes和关系的数据透视表(ports_of_route)。Ports表包含order列,该列可以是1-10之间的整数。这就给了我路线上港口的顺序。

现在,我将all ports from ports表放到一个选择框中,当用户选择一个端口时,我应该得到所有可能从所选端口出发的端口(订单号应该高于路由的选定订单号)。但没有具体的路线编号,路线对此不重要。

例如,船舶的航线可以从端口-1(订单: 1,route_id: 2)开始,然后从端口-2(订单: 2,route_id: 2)、端口-3(订单: 3,route_id: 2)、端口-4(订单: 4,route_id: 2)开始。另一艘船可能从港口-3出发(订单: 1,route_id: 3),前往港口-5(订单: 2,route_id: 3)。这些是不同的路线。当用户选择port-3时,我应该得到port-4和port-5。

如果不进行两次查询调用,我就不能理解这一点。我能在一个查询中做到这一点吗?

表(未写入不必要的列):

代码语言:javascript
复制
    ports
    id   title
    1   port-1
    2   port-2
    3   port-3

..
代码语言:javascript
复制

路线

id标题

1路由-1

2路由-2

代码语言:javascript
复制
代码语言:javascript
复制
    ports_of_route
    port_id   route_id   order
    1         1          1
    2         1          2
    3         1          3
    2         2          1
    4         2          2
    ..
    ```

    Output: (port-2 selected)
    ```
    port_id ...
    3
    4
    ```
EN

回答 1

Stack Overflow用户

发布于 2019-08-10 19:05:19

您可以执行以下操作:

代码语言:javascript
复制
select prnext.*
from ports_of_route pr join
     ports_of_route prnext 
     on prnext.order = pr.order + 1
where pr.port_id;

这将使用端口ids并将结果放在单独的行中。如果您需要端口名称,则需要额外的联接:

代码语言:javascript
复制
select prnext.*, pnext.title
from ports_of_route pr 
     ports_of_route prnext 
     on prnext.order = pr.order + 1 join
     ports p
     on pr.port_id = p.id join
     ports pnext
     on prnext.port_id = pnext.port_id
where p.title = 'port-3';
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57441429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档