Mysql 如何编写有关公交车站应用程序的特定查询?
我的数据库中有一个名为stops的下表Mysql 如何编写有关公交车站应用程序的特定查询?,mysql,sql,Mysql,Sql,我的数据库中有一个名为stops的下表 Id coll-id busnumber stops 1 v01 900 abc 2 v01 900 bcd 3 v01 14 abc 4 v01 14 bcd 5 v01 14 def 巴士基本上停在所有提到的地点,要求用户输入来源和目的地。我们需要获得从源头到目的地的所有可用公交车号码。我无法这样做,我
Id coll-id busnumber stops
1 v01 900 abc
2 v01 900 bcd
3 v01 14 abc
4 v01 14 bcd
5 v01 14 def
巴士基本上停在所有提到的地点,要求用户输入来源和目的地。我们需要获得从源头到目的地的所有可用公交车号码。我无法这样做,我需要在特定公交号的“站点”列中找到这两个值。例如,如果源是abc,目标是bcd,我需要返回900和14,这只是示例数据,将有更多的公交线路重叠。请提供帮助?仅选择您需要的两个站点的行。按公交车编号分组,以获取每辆公交车的匹配站点数。只返回与两个站点匹配的站点
DISTINCT
可能不是真的需要,但如果一个站点可能在一辆公交车的路线上多次出现,则确保结果仍然正确
如果你想让所有的公交车停在3站或4站,这种方法也会起作用。只需展开停止列表,并相应地增加having
子句中的数字
SELECT
busnumber
FROM
stops s
WHERE
s.stops in ('abc', 'bcd')
GROUP BY
busnumber
HAVING
COUNT(DISTINCT s.stops) = 2
您可以使用
self-join
获取给定两个站点的公交车号
SELECT b1.busnumber
FROM stops b1
JOIN stops b2
ON b1.busnumber = b2.busnumber
AND b1.stops ='abc'
AND b2.stops ='def'
你是说不同的公共汽车号码?这条路线有两站。嘿,谢谢。我试过类似的方法。我无法理解group by函数group by是指每个总线号只能得到一个结果,并允许您对每个组进行聚合,就像它后面的
COUNT
。@Ben仔细想想,不,我的意思是停止。这将提供两个站点与where子句中的站点列表相匹配的路由。因此,这给了你一个从“abc”到“bcd”的总线列表,我相信这就是被问到的。取消它。是的,我正在考虑自我加入,但有点忘了怎么做:/谢谢!