我的数据库中有以下表名为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 ,这只是样本数据,将有更多的公交车重叠路线。请帮忙吗?
答案 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'