Mysql 如何编写有关公交车站应用程序的特定查询?

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 巴士基本上停在所有提到的地点,要求用户输入来源和目的地。我们需要获得从源头到目的地的所有可用公交车号码。我无法这样做,我

我的数据库中有一个名为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

巴士基本上停在所有提到的地点,要求用户输入来源和目的地。我们需要获得从源头到目的地的所有可用公交车号码。我无法这样做,我需要在特定公交号的“站点”列中找到这两个值。例如,如果源是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”的总线列表,我相信这就是被问到的。取消它。是的,我正在考虑自我加入,但有点忘了怎么做:/谢谢!