2013-06-19 92 views
1

我有一个包含路由标识的公交车一台有公车站.. 像下面返回一个MySQL表列..根据列条件

route_id     stop_name 
    1234      stop1 
    1234      stop2 
    1235      stop7 
    1235      stop8 

我想,同时包含停止1和停止2 ROUTE_ID(用于停止1和停止2我想获得1234)

我写此查询..

SELECT DISTINCT(route_id) 
FROM bus_stops 
WHERE stops='stop1' AND stops='stop2' 

但它返回一个空集。

+1

尝试使用'OR'而不是'AND' – Fabio

+0

但如果我正在使用或我认为它不会满足两个(停止)条件... –

+0

切换到OR并不帮助他 - 这不会保证他得到一个停在两个站点的route_id,只是通过任一站点的所有路线。 –

回答

2

你可以试试这个,但我不能保证这是最好的或最优雅的解决方案:

SELECT DISTINCT route_id FROM myTable AS myAlias 
WHERE EXISTS (SELECT * FROM myTable WHERE route_id = myAlias.route_id AND stop_name = 'stop1') 
    AND EXISTS (SELECT * FROM myTable WHERE route_id = myAlias.route_id AND stop_name = 'stop2') 

事实上,我甚至不答应它的测试 - 但使用类似于子查询应该让你在那里。

+0

是的这一个是正确的没有复制在route_id –

+0

谢谢你..上帝保佑你.. –

3

试试这个:

select distint route_id from bus_stops s1 
where exists(select 1 from bus_stops s2 where s1.route_id = s2.route_id and s2.stop_name = 'stop1') 
and exists(select 1 from bus_stops s2 where s1.route_id = s2.route_id and s2.stop_name = 'stop2') 

它会给你有两个站的路线。

+0

Upvoted发布完全相同的解决方案,提前4秒:-) –