我有两个表: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 |
--------------------
答案 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);