本人初学 特来求教达人 急!两个关于火车信息的表
T_Schedule
ScheduleCode varchar(10)
fromCity varchar(20)
toCity varchar(20)
LeaveTime datetime
ArrivalTime datetime
TrainType varchar(10)
Speed varchar(10)
Distance int
Days int
T_Schedule_Detail
cid int 非空 主键
ScheduleCode varchar(10)
cityName varchar(20)
ArrivalTime datetime
LeaveTime datetime
NumOfSchedule int
Distance int
Days int 问题:若无法从始发站直达终点站 需要中转..
提供 始发站名 和 终点站名
要求 查询到 所有 能从 A 站到 B 站的中转站名
T_Schedule
ScheduleCode varchar(10)
fromCity varchar(20)
toCity varchar(20)
LeaveTime datetime
ArrivalTime datetime
TrainType varchar(10)
Speed varchar(10)
Distance int
Days int
T_Schedule_Detail
cid int 非空 主键
ScheduleCode varchar(10)
cityName varchar(20)
ArrivalTime datetime
LeaveTime datetime
NumOfSchedule int
Distance int
Days int 问题:若无法从始发站直达终点站 需要中转..
提供 始发站名 和 终点站名
要求 查询到 所有 能从 A 站到 B 站的中转站名
车次号
始发站
终点站
离开时间
到达时间
火车类型
车速
总里程数
行驶天数
表2
cid 主键ID
车次号
本车次路径的站点名
到达此站点时间
离开此站点时间
本站台 在行驶线上的顺序
已完成 里程数
已完成 天数
表1
ScheduleCode,fromCity,toCity,LeaveTime,ArrivalTime, TrainType, Speed,Distance,Days
T108 北京 海南
T989 长沙 重庆
表2
cid ScheduleCode cityName ArrivalTime LeaveTime NumOfSchedule Distance Days
1 T108 北京 11:03 11:30 1 0 0
2 T108 郑州 12:09 12:30 2 689 1
3 T108 长沙 18:00 18:05 3 1486 1
4 T108 海南 14:45 14:45 4 4469 3
5 T989 长沙 9:00 9:20 1 0 0
6 T989 重庆 12:00 12:00 2 1445 1
题目意思 就是 如果 始法站是 北京 终点站是 重庆 如何 找到中转站(长沙)
from T_Schedule_Detail a left join T_Schedule_Detail b
on a.cityName = b.cityName and a.ScheduleCode <> b.ScheduleCode
where exists (select 1 from T_Schedule_Detail
where ScheduleCode = a.ScheduleCode and cityName = '北京') and
exists (select 1 from T_Schedule_Detail
where ScheduleCode = b.ScheduleCode and cityName = '重庆)
--建表(只建立相关字段)
create table T_Schedule_Detail
(
cid int,
ScheduleCode varchar(4),
cityName varchar(10)
)insert into T_Schedule_Detail select 1, 'T108', '北京'
insert into T_Schedule_Detail select 2, 'T108', '郑州'
insert into T_Schedule_Detail select 3, 'T108', '长沙'
insert into T_Schedule_Detail select 4, 'T108', '海南'
insert into T_Schedule_Detail select 5, 'T989', '长沙'
insert into T_Schedule_Detail select 6, 'T989', '重庆'--查询
select a.ScheduleCode ,a.cityname ,b.ScheduleCode , b.cityname
from T_Schedule_Detail a left join T_Schedule_Detail b
on a.cityName = b.cityName and a.ScheduleCode <> b.ScheduleCode
where exists (select 1 from T_Schedule_Detail
where ScheduleCode = a.ScheduleCode and cityName = '北京') and
exists (select 1 from T_Schedule_Detail
where ScheduleCode = b.ScheduleCode and cityName = '重庆')--结果
ScheduleCode cityname ScheduleCode cityname
------------ ---------- ------------ ----------
T108 长沙 T989 长沙(所影响的行数为 1 行)--其意为:乘坐T108次在长沙转T989次