0

我想创建一个查询,该查询将返回包含两个停止变量的所有 route_id。

|   route_stop_id   |   route_id    |   stop_id |   time (in sec)   |
———————————————————————————————————————————————————————————————————————
|   1           |   1           |   1       |   3:24pm      |
|   2           |   1           |   2       |   3:26pm      |
|   3           |   1           |   3       |   3:29pm      |
|   4           |   1           |   4       |   4:04pm      |
|   5           |   2           |   1       |   3:03pm      |
|   6           |   3           |   1       |   3:02pm      |

如果route_idstop_id = 1并且stop_id = 2

SELECT route_id FROM route_stop_list WHERE stop_id = 1 and stop_id = 2

但是上面的语句没有返回任何东西,因为没有行可以同时具有 a stop_idof1和 a stop_idof 2。但是有没有可能写出一个能正确返回的语句呢?


编辑,更多解释,因为我认为这有点令人困惑。

这是一个交通应用程序。

我的应用程序要求用户输入起点和终点。

我正在尝试编写一个 SQL 语句,它将返回两个站点都存在的所有路线。

4

3 回答 3

2

使用这个(已编辑)

SELECT t1.route_id 
FROM route_stop_list t1 join route_stop_list t2 on t1.route_id=t2.route_id
where  t1.stop_id=1 AND t2.stop_id=2

解释

我先加入 2 张桌子(你的桌子和自己的桌子)。t1 和 t2 只是表的别名(昵称),以便您以后可以参考它们。这给了我们所有可能的组合。加入的条件是具有相同的路由ID。尝试在没有最后一行的情况下运行查询(where 子句)。使用 select * 获取所有列。如果你仍然不明白,我会解释更多。

于 2013-11-05T05:46:27.003 回答
1

请试试:

SELECT route_id 
FROM route_stop_list 
WHERE stop_id IN (1, 2)
GROUP BY route_id
HAVING COUNT(DISTINCT stop_id)=2
于 2013-11-05T05:49:26.830 回答
0

这将做到:

SELECT route_id FROM route_stop_list
WHERE stop_id IN (1, 2)
GROUP BY route_id
HAVING COUNT(DISTINCT stop_id) = 2

在这里拉小提琴。

唯一需要考虑的是,您需要将子句中的元素IN数量与子句中的数字相匹配HAVING

请注意,您不需要加入要查找的路线数量的N时间。N那是非常低效的。

最后,请记住,如果给定的HAVING不能有 2 个或更多相同,则应将该子句替换为以下子句:stop_idroute_id

HAVING COUNT(*) = 2
于 2013-11-05T05:52:54.763 回答