我正在尝试验证某些车辆行程相关的一些数据。
行程数据的格式为
Vehicle Trip Place_Name
1 1 ATown
1 2 BTown
1 3 ATown
2 1 ATown
2 2 CTown
此表链接到有关每个地方的信息。不幸的是,一些声明的地方并不是唯一的,即可能有不止一个名为ATown的地方。
所以地方数据的格式为
Place_ID Place_Name Co-ordinates
1 ATown Lat1,Lng1
2 ATown Lat2,Lng2
3 ATown Lat3,Lng3
4 BTown Lat4,Lng4
5 BTown Lat5,Lng5
6 CTown Lat6,Lng6
因此有三个名称Atown,两个名为BTown的地方,只有一个名为CTown的地方。
如果我加入两个表
select T.Vehicle , T.Trip , P.Place_ID , P.Place_Name
from Trips as T
left join
Places as P
on T.Place_Name = T.Place_Name
我得到了
T.Vehicle T.Trip P.Place_ID P.Place_Name
1 1 1 ATown
1 1 2 ATown
1 1 3 ATown
1 2 4 BTown
1 2 5 BTown
1 3 1 ATown
1 3 2 ATown
1 3 3 ATown
2 1 1 ATown
2 1 2 ATown
2 1 3 ATown
2 2 6 CTown
我想要的是每辆车的一组独特的地方组合
Vehicle Possibility Trip Place_Name Place_ID
1 1 1 ATown 1
1 1 2 BTown 4
1 1 3 ATown 1
1 2 1 ATown 2
1 2 2 BTown 4
1 2 1 ATown 1
1 3 1 ATown 3
1 3 2 BTown 4
1 3 3 ATown 1
1 4 1 ATown 1
1 4 2 BTown 5
1 4 3 ATown 1
1 5 1 ATown 2
1 5 2 BTown 5
1 5 3 ATown 1
1 6 1 ATown 3
1 6 2 BTown 5
1 6 3 ATown 1
1 7 1 ATown 1
1 7 2 BTown 4
1 7 3 ATown 3
1 8 1 ATown 2
1 8 2 BTown 4
1 8 3 ATown 3
1 9 1 ATown 3
1 9 2 BTown 4
1 9 3 ATown 3
车辆1最终应该有18条可能的路线,车辆2应该有3条。每辆车的行程次数与同名城镇的数量不同。
一旦我有了地点组合,我就可以使用坐标来绘制每辆车的路线并计算起始距离。然后我将使用它来验证其他距离信息。
我正在努力找出从哪里开始构建一个可以产生我需要的结果的SQL查询。
任何指针都会受到赞赏。
答案 0 :(得分:0)
您的加入是正确的。 。 。但是你需要再次加入以获得第二站:
select stop1.Vehicle, stop1.Trip,
stop1.Place_Name as Place_Name1, stop2.Place_Name as Place_Name2,
stop1.Place_id as PlaceId1, stop2.Place_id as Palce_Id2
from (select T.Vehicle, T.Trip, P.Place_ID, P.Place_Name
from Trips as T left join
Places as P
on T.Place_Name = T.Place_Name
) stop1 join
(select T.Vehicle, T.Trip, P.Place_ID, P.Place_Name
from Trips as T left join
Places as P
on T.Place_Name = T.Place_Name
) stop2
on stop1.Vehicle = stop2.Vehicle and
stop1.trip = stop2.trip + 1;
我不确定“可能性”代表什么。如果你想以某种方式枚举这些,那么这取决于数据库。以上是标准SQL,适用于大多数数据库。