我有表總線,街道,route_going,route_return對此的最佳查詢是什麼?
在表中的街道我有
實施例:
id | name
1 | street1
2 | street2
3 | street4
...
n | streetn
表route_going,我有實施例:
id_bus | id_street | order
101 | 1 | 1
101 | 2 | 2
101 | 5 | 3
...
表route_return,我有例子:
id_bus | id_street | order
101 | 3 | 1
101 | 2 | 2
101 | 1 | 3
...
好的,在這個例子中,公交車101依次從街道1,2和5行駛。並按照此順序從大街3,2和1返回。
我想知道哪些公交車在街道通過 'X' 和街道 'Y'(第一個X,後來Y)
例如:
x = 1, y = 5 -> the bus 101 pass
x = 1, y = 3 -> the bus 101 pass
x = 3, y = 1 -> the bus 101 pass
x = 3, y = 5 -> the bus 101 don't pass
所以,我的SQL的查詢公交車是...(通過爲街道1和5舉例)
select * from bus as b where
-- The bus passes between the 2 streets at the going route??
exists (select * from route_going as rg1, route_going as rg2,street as r1,street as r2 where rg1.id_bus = rg2.id_bus and rg1.id_street = r1.id and rg2.id_street = r2.id and r1.id = 1 and r2.id = 5 and b.bus_id = rg1.id_bus and rg1.order <= rg2.order)
-- The bus passes between the 2 streets at the return route??
or exists (select * from route_return as rg1, route_return as rg2,street as r1,street as r2 where rg1.id_bus = rg2.id_bus and rg1.id_street = r1.id and rg2.id_street = r2.id and r1.id = 1 and r2.id = 5 and b.bus_id = rg1.id_bus and rg1.order <= rg2.order)
-- The bus passes between the 2 streets at the going route first and return route later??
or exists (select * from route_going as rg1, route_return as rg2,street as r1,street as r2 where rg1.id_bus = rg2.id_bus and rg1.id_street = r1.id and rg2.id_street = r2.id and r1.id = 1 and r2.id = 5 and b.bus_id = rg1.id_bus)
所以,我覺得這個查詢是不好的。有人可以幫我說出這個搜索的「最佳」查詢嗎?
我們可以有一個[SQL小提琴](http://sqlfiddle.com/)?請?另外,添加有關您的索引的信息。這可能會有所作爲。 – jpmc26
我不明白,你的代碼做太多事情,只是要檢查一輛公共汽車是否通過街道 –
@NoIdeaForName ** ** ** **街道!爲了! – Gabriel