查询限售站以及票数的问题 我详细说明一下数据库中的表 1. trainInfo(基本信息表)     列车ID        车次      日期      始发站    终点站    限售站  硬座  硬卧  软座  软卧  站票 
  190000140823    1405    20090722    通化      青岛      青岛    0    45    0    3    72 
  190000140823    1405    20090722    通化      青岛      青州市  0      0    0    0    1 2.trainDetails(详细信息表)     列车ID      序列      站名      车次      到时    发时 
190000140823    19      天津      1405      0753    0802 
190000140823    20      沧州      1405      0921    0924 
190000140823    21      泊头      1405      1019    1022 
190000140823    22      德州      1405      1117    1120 
190000140823    23      禹城      1405      1203    1205 
190000140823    24      晏城      1405      1219    1221 
190000140823    25      济南东    1405      1255    1308 
190000140823    26      淄博      1405      1407    1409 
190000140823    27      青州市    1405      1435    1437 
190000140823    28      潍坊      1405      1524    1528 
190000140823    29      高密      1633      1700 
190000140823    30      青岛      1405      1813    1813 
要求:我使用站站查询:从“A”到“B”,查“B”站后面的所有限售站以及对应的票数 例如:
我使用站站查询:从“济南东”到“淄博”,查“淄博”站后面的所有限售站以及对应的票数 
通过查询我们知道从“济南东”到“淄博”,有一辆ID为190000140823的火车
从trainInfo表可以看出ID为190000140823的火车有两个限售站:青州市、青岛
从trainDetails表可以看出”淄博“站后面的限售站是青州市和青岛
所以查询结果应该为:    列车ID        车次      日期      始发站    终点站    限售站  硬座  硬卧  软座  软卧  站票 
  190000140823    1405    20090722    通化      青岛      青岛    0     45     0     3     72 
  190000140823    1405    20090722    通化      青岛      青州市  0      0     0     0      1 再比如,查询从“济南东”到“潍坊”,“潍坊”站后面的限售站是青岛
大家帮忙写出查询语句来!
还有,触发器专家,现身吧!

解决方案 »

  1.   

    bom,父子关系. 但要注意不要陷入死循环。邹老大有这样的代码,自己去搜下吧。
      

  2.   

    declare @trainInfo table( 列车ID varchar(12),车次 varchar(4),日期 varchar(8),始发站 varchar(10),终点站 varchar(10),限售站 varchar(10), 硬座 int,硬卧 int, 软座 int, 软卧 int, 站票 int)insert @trainInfo select '190000140823',    '1405',    '20090722',    '通化',      '青岛',      '青岛',    0,   45 ,   0 ,   3 ,   72 
    insert @trainInfo select '190000140823',    '1405',    '20090722',    '通化',      '青岛',      '青州市',  0  ,    0 ,   0 ,   0  ,  1 declare @trainDetails table(列车ID varchar(12),序列 int,站名 varchar(10), 车次 varchar(4),到时 varchar(4),发时 varchar(4)) 
    insert @trainDetails select '190000140823',    19      ,'天津'      ,'1405'      ,'0753'    ,'0802' 
    insert @trainDetails select '190000140823',    20       ,'沧州'      ,'1405'      ,'0921'    ,'0924' 
    insert @trainDetails select '190000140823',    21       ,'泊头'      ,'1405'      ,'1019'    ,'1022' 
    insert @trainDetails select '190000140823',    22       ,'德州'      ,'1405'      ,'1117'    ,'1120' 
    insert @trainDetails select '190000140823',    23       ,'禹城'      ,'1405'      ,'1203'    ,'1205' 
    insert @trainDetails select '190000140823',    24       ,'晏城'      ,'1405'      ,'1219'    ,'1221' 
    insert @trainDetails select '190000140823',    25       ,'济南东'    ,'1405'      ,'1255'    ,'1308' 
    insert @trainDetails select '190000140823',    26       ,'淄博'      ,'1405'      ,'1407'    ,'1409' 
    insert @trainDetails select '190000140823',    27       ,'青州市'    ,'1405'      ,'1435'    ,'1437' 
    insert @trainDetails select '190000140823',    28       ,'潍坊'      ,'1405'      ,'1524'    ,'1528' 
    insert @trainDetails select '190000140823',    29       ,'高密'      ,'1633'      ,'1700' ,''
    insert @trainDetails select '190000140823',    30       ,'青岛'      ,'1405'      ,'1813'    ,'1813' declare @Station1 varchar(10),@Station2 varchar(10)
    select @Station1='济南东',@Station2='淄博'
    select a.* from @trainInfo a 
    inner join @trainDetails b on a.列车ID=b.列车ID and a.限售站=b.站名
    inner join @trainDetails c on a.列车ID=c.列车ID and c.站名=@Station2
    where a.列车ID in (
    select distinct 列车ID from @trainDetails a 
    where exists(select 1 from @trainDetails where 列车ID=a.列车ID and 站名=@Station1)
    and exists(select 1 from @trainDetails where 列车ID=a.列车ID and 站名=@Station2))
    and b.序列>c.序列/*
    190000140823 1405 20090722 通化 青岛 青岛 0 45 0 3 72
    190000140823 1405 20090722 通化 青岛 青州市 0 0 0 0 1
    */
    --如果是潍坊的话。
    /*
    190000140823 1405 20090722 通化 青岛 青岛 0 45 0 3 72
    */
      

  3.   

    and b.序列>c.序列   是否写错了?
    应该是:and b.序列<c.序列
      

  4.   

    --try:
    declare @Station1 varchar(10),@Station2 varchar(10)
    select @Station1='济南东',@Station2='淄博'
    select a.* from @trainInfo a 
    inner join @trainDetails b on a.列车ID=b.列车ID and a.限售站=b.站名
    inner join @trainDetails c on a.列车ID=c.列车ID and c.站名=@Station2
    inner join @trainDetails d on a.列车ID=d.列车ID and d.站名=@Station1
    where a.列车ID in (
    select distinct 列车ID from @trainDetails a 
    where exists(select 1 from @trainDetails where 列车ID=a.列车ID and 站名=@Station1)
    and exists(select 1 from @trainDetails where 列车ID=a.列车ID and 站名=@Station2))
    and b.序列>c.序列 and c.序列>d.序列
      

  5.   

    and b.station_no>c.station_no
    这句是干什么的?
    哪句是确定站站方向的?
      

  6.   

    and b.station_no>c.station_no 
    这句我知道是干什么的了!确定站站方向的?是不是把
    where exists(select 1 from @trainDetails where 列车ID=a.列车ID and 站名=@Station1)
    and exists(select 1 from @trainDetails where 列车ID=a.列车ID and 站名=@Station2))
    写成
    where exists(select 1 from @trainDetails where 列车ID=a.列车ID and 站名=@Station1)
    and exists(select 1 from @trainDetails where 列车ID=a.列车ID and 站名=@Station2)
    and b.station_no<c.station_no )若是,可是更改后查不出结果?
      

  7.   

    不是给你写了吗?
    c.序列>d.序列,这个是确定火车方向的。
    给你都写好了,自己乱改?
    你刚接触SQL?
      

  8.   

    以前没有在SQL下工夫,写的都很简单