我想创建一个查询,它将返回包含两个停止变量的所有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_id
有stop_id = 1
和stop_id = 2
SELECT route_id FROM route_stop_list WHERE stop_id = 1 and stop_id = 2
但是上面的语句没有返回任何内容,因为没有行可以同时拥有stop_id
1
和stop_id
2
。但是有可能写出一个能够正确返回的声明吗?
这是一个交通工具。
我的应用程序要求用户输入起止点和结束点。
我正在尝试编写一个SQL语句,它将返回两个停靠点都存在的所有路由。
答案 0 :(得分: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 *获取所有列。如果你仍然不明白,我会解释更多。
答案 1 :(得分:1)
请尝试:
SELECT route_id
FROM route_stop_list
WHERE stop_id IN (1, 2)
GROUP BY route_id
HAVING COUNT(DISTINCT stop_id)=2
答案 2 :(得分:0)
这样做:
SELECT route_id FROM route_stop_list
WHERE stop_id IN (1, 2)
GROUP BY route_id
HAVING COUNT(DISTINCT stop_id) = 2
小提琴here。
唯一需要考虑的是,您需要将IN
子句中的元素数量与HAVING
子句中的数字相匹配。
请注意,您无需加入N
次N
是要查找的路由数量。这是非常低效的。
最后,请注意,如果给定的HAVING
不能有2个或更多相同的stop_id
,则应将route_id
子句替换为以下HAVING COUNT(*) = 2
:
{{1}}