0

我有 3 张桌子:

Buses:
    id   |   bus_name
    1    |   2D
    2    |   1D

Routes:
id   |   route_name
1    |   Garden
2    |   Malir

Bus_Route
id......|....bus_id...|....route_id
1.......|......1......|....1   
2.......|......1......|....2   
3.......|......2......|....1

我想要一辆从“花园”和“马里尔”(即 2D)经过的公共汽车。我已经尝试过,并且我成功地绘制了一条路线,例如公共汽车仅从花园经过,但有一个条件是有两个组合框,一个是公共汽车开始的地方,第二个是结束的地方..我想要整个路线从公共汽车经过的地方像我在上面的示例中提到的 1D 花园和 malir 仅来自 Malir 而不是来自花园,因此如果 Start 来自 Garden 并且 end 在 malir 上,则仅显示 2D .. 我的查询如下:

select b.bus_name 
from buses b, route r, bus_route br 
where (b.id = br.bus_id AND r.id = br.route_id) 
  AND (r.id=1 AND r.id=2)

它给出空的结果集

想要解决这个问题。

4

2 回答 2

2
SELECT bus_name
FROM buses
WHERE id in
(SELECT b.bid
FROM bus_route b
JOIN bus_route _b  
ON b.bid = _b.bid  
WHERE b.rid = 1 AND _b.rid = 2)
于 2012-12-22T20:07:47.707 回答
0

您应该能够使用以下查询:

select *
from buses b
left join bus_route br
  on b.id = br.bus_id
where br.route_id = 1
  and exists (select *
              from buses b1
              left join bus_route br2
                on b1.id = br2.bus_id
              where br2.route_id=2
               and b.id = b1.id)

请参阅带有演示的 SQL Fiddle

返回结果:

| ID | BUS_NAME | BUS_ID | ROUTE_ID |
-------------------------------------
|  1 |       2D |      1 |        1 |
于 2012-12-22T20:14:46.780 回答