MySQL:仅当字段值递增时选择

时间:2019-05-30 14:59:31

标签: mysql sql database relational-database

我有两个表:Route和Stop(一对多)。而且我还有输入数据:与“停止”表相关的两个位置ID。每条路线都有自己的按顺序排列的停靠点列表。我需要根据具有开始和结束位置的停止订单(OLNY,其中stop.order升序)选择“路线”。

数据示例:

| ROUTE            |
--------------------
| id | name        |
--------------------
| 1 | first        |
--------------------
| 2 | second       |
--------------------

---------------------------
| STOP                    |
---------------------------
|id | order |loc_id|route_id|
----------------------------
| 1 | 1     |  1   |  1   |
---------------------------
| 2 | 2     |  2   |  1   |
---------------------------
| 3 | 3     |  3   |  1   |
---------------------------
| 4 | 3     |  1   |  2   |
---------------------------
| 5 | 2     |  2   |  2   |
---------------------------
| 6 | 1     |  3   |  2   |
---------------------------

使用案例:例如,我有3个位置:洛杉矶(id = 1),芝加哥(id = 2)和纽约(id = 3)。也有2条巴士路线:LA到NY和NY到LA。这意味着我有3个巴士站,每个路线都基于给定的位置,但顺序相反。所以我需要创建MySQL查询以选择具有开始和结束位置的适当路由。 例如,如果我以芝加哥为起点,以洛杉矶为终点,则查询必须返回给我纽约到洛杉矶的路线。如果我在芝加哥和纽约都设有地点-应该可以从洛杉矶到纽约。

那是我能够创建的查询,但是它当然不起作用

SELECT `route`.* 
FROM `route`
WHERE (SELECT stop.order FROM `stop` WHERE stop.locationId = 1) < (
        SELECT stop.order FROM `stop` WHERE stop.locationId = 2)

(其中1和2是位置ID输入数据)

如果我有loc_id 1和2,我需要得到这个结果

--------------------
| id | name        |
--------------------
| 1 | first        |
--------------------

因此,如果loc_id = 2和1,我需要下一个结果:

--------------------
| id | name        |
--------------------
| 2 | second       |
--------------------

1 个答案:

答案 0 :(得分:0)

尝试一下:

SELECT R.id, R.name
FROM Stop S
INNER JOIN Route R ON R.id = S.route_id
WHERE 
S.loc_id = 1 AND 
EXISTS (SELECT Id FROM Stop F WHERE S.route_id = F.route_id AND F.order > S.order AND F.loc_id = 2);