向大家问好!
我一直在思考这几天,希望有人能指出我正确的方向:
我有一张带有车站链接的桌子:
stationID
lineID
我想在所有连接的站点之间生成站点对。车站将在两种情况下连接。
- 如果它们具有相同的 lineID(即它们是直接连接的)
- 如果线相交(线相交,如果它们有任何公共站点)。
我该怎么做?提前感谢您的意见和想法!
不要将其存储lineID
在station
表中。而是使用三个表:station
、line
和station_line
。第三个表将车站与线路组合在一起,给出了一个车站可能有零条、一条或多条线路。
station:
ID
name
line:
ID
name
station_line:
station
line
看看这个(SQLFiddle):
select distinct a.stationName as 'st1', b.stationName as 'st2', a.lineId from
tbl as a, tbl as b where
(a.lineId in (select lineId from tbl where stationId in
(select stationId from tbl where lineId=b.lineId)) &&
a.stationId<>b.stationId) ;