2012-07-25 40 views
0

我有以下的数据库表,其中保存有关的公共交通系统的信息:SQL查询:特定项目后,选择所有引用

  • 站(ID,姓名)
  • 换乘(ID,lineName)
  • RideStop(rideId,的stationID,的sequenceNumber,arrivalTime,departureTime)

的RideStop参考了平顺性和车站。当通过sequenceNumber订购RideStops时,您可以获得该特定行程的路径。

我需要从所有游乐设施获取路线,这些游乐设施从特定车站出发。 我可以通过执行

select * 
from ridestop rs 
where rs.ride in (
    SELECT ride FROM ttm.ridestop where stationid = 8503000 
) 

但是获得完整的路径,我不在乎一搭的来源,只有在它去。

问题: 我怎样才能将结果限制在从车站8503000开始的剩余部分车辆?

+0

如果站不按递增顺序,你在下面写明,怎么是“游乐设施的其余部分”决心?特别是如上所述,“通过sequenceNumber订购RideStops”为您提供了具体搭乘路线... – mikeY 2012-07-25 15:03:13

+0

我认为您会混淆车站ID和序列号。工作站ID是“随机的”,但RideStop记录的序列号是递增顺序。因此,如果您获取特定车站的RideStop记录,则会获得通过该车站的游乐设施。现在,如果您采用序列号高于车站8503000的那些车次的所有RideStop记录并按sequenceNumber排序,您将获得剩余路径。 – dube 2012-07-25 15:16:56

回答

2

以下查询使用一个子查询来查看该车站上每个车站的序列号。然后,它将它加入到乘车站点,以便选择乘坐该号码或乘车后的所有内容。

select rs.* 
from ridestop rs join 
     (SELECT ride, rs.sequenceNumber 
     FROM ride r join 
      ridestop rs 
      on r.ride = rs.ride 
     where stationid = 8503000 
    ) r 
     on rs.ride = r.ride and 
     rs.sequenceNumber >= r.sequenceNumber 
order by rs.ride, rs.sequenceNumber 
+0

我认为这是正确的方向,但这个查询返回很多dublicates。看起来像它的每个记录的顺序编号乘以(X行第4行出现4次) – dube 2012-07-25 15:01:06

+1

毫无疑问。 。 。在子查询中的加入应该是在乘车和乘车停车,而不是乘车和停车。我解决了这个问题。 – 2012-07-25 15:35:08

+0

谢谢,这正是我正在寻找的。如果不需要来自驾驶台的数据,则可以通过直接连接到驾驶台表来替换内部子查询。 – dube 2012-07-25 15:57:50

0

如果的stationID在递增序列..下面的查询工作

SELECT * 
FROM ridestop rs 
WHERE rs.ride IN (SELECT ride 
        FROM ttm.ridestop 
        WHERE (stationid = 8503000 
          AND stationid > 8503000)) 
+0

这将是很好,但站不一定在增加的顺序。线路纵横交错的网络 – dube 2012-07-25 14:55:28

+1

应该是“在哪里(stationid = 8503000或stationid> 8503000))”?? – mikeY 2012-07-25 14:58:52

相关问题