如何编写关于巴士站应用的特定查询?

时间:2015-01-07 18:29:14

标签: 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

总线基本上停在所有提到的点上,要求用户输入源和目的地。我们需要从源到目的地获得所有可用的公交车总线号码。我无法这样做,我需要在特定总线编号的列停靠位中找到这两个值。例如,如果源是abc和目标bcd,我需要返回900和14 ,这只是样本数据,将有更多的公交车重叠路线。请帮忙吗?

2 个答案:

答案 0 :(得分:1)

选择,只选择您想要的两个停靠点的行。按公交车号码分组,以获得每辆公交车的匹配站点数。只返回匹配两个停靠点的那些。 DISTINCT可能并不是必需的,但如果一次停靠多次,可以确保结果仍然正确。

如果您想让所有停靠在3或4站的公交车,这种方法也会有效。只需展开停靠列表并相应地增加having子句中的数字。

SELECT
  busnumber
FROM
  stops s
WHERE
  s.stops in ('abc', 'bcd')
GROUP BY
  busnumber
HAVING
  COUNT(DISTINCT s.stops) = 2

答案 1 :(得分:1)

您可以使用self join获取两站的公交车号码

   SELECT b1.busnumber 
   FROM stops b1
   JOIN stops b2
   ON b1.busnumber = b2.busnumber
   AND b1.stops ='abc'
   AND b2.stops ='def'