SELECT S7.*,E3.*
    FROM (
SELECT S5.*,S6.VC_BLID AS S6_BLID,S6.VC_BSNAME AS S6_BSNAME,S6.FL_POINTX AS S6_POINTX,S6.FL_POINTY AS S6_POINTY,S6.I_ASC AS S6_ASC
FROM (
      SELECT S3.*,S4.VC_BLID AS S4_BLID,S4.VC_BSNAME AS S4_BSNAME,S4.FL_POINTX AS S4_POINTX,S4.FL_POINTY AS S4_POINTY,S4.I_ASC AS S4_ASC 
 FROM (
              SELECT S1.*,S2.VC_BLID AS S2_BLID,S2.VC_BSNAME AS S2_BSNAME,S2.FL_POINTX AS S2_POINTX,S2.FL_POINTY AS S2_POINTY,S2.I_ASC AS S2_ASC
 FROM (
        SELECT VC_BLID AS S1_BSID,B.I_ID AS S1_ID,A.VC_BSNAME AS S1_BSNAME,A.I_ASC AS S1_ASC,
A.FL_POINTX AS S1FL_POINTX,A.FL_POINTY AS S1FL_POINTY,
B.VC_LOC_NAME AS START_NAME,B.FL_POINTX AS START_POINTX,B.FL_POINTY AS START_POINTY
                 FROM BUS_BUSSITEB A,LOCATION_SITE B
                      WHERE (VC_LOC_NAME='码头')
AND Sqrt((A.FL_POINTX-B.FL_POINTX)*(A.FL_POINTX-B.FL_POINTX)+
(A.FL_POINTY-B.FL_POINTY)*(A.FL_POINTY-B.FL_POINTY))<=0.002
       ) S1,BUS_BUSSITEB S2
      WHERE S1_BSID=VC_BLID
      ) S3,BUS_BUSSITEB S4
 WHERE (S4.VC_BLID NOT IN(
SELECT VC_BLID AS S1_BSID
                 FROM BUS_BUSSITEB A,LOCATION_SITE B
                      WHERE (VC_LOC_NAME='码头')
AND Sqrt((A.FL_POINTX-B.FL_POINTX)*(A.FL_POINTX-B.FL_POINTX)+
(A.FL_POINTY-B.FL_POINTY)*(A.FL_POINTY-B.FL_POINTY))<=0.002
 ))
AND Sqrt((S2_POINTX-S4.FL_POINTX)*(S2_POINTX-S4.FL_POINTX)+
(S2_POINTY-S4.FL_POINTY)*(S2_POINTY-S4.FL_POINTY))<=0.002
     ) S5,BUS_BUSSITEB S6
 WHERE S4_BLID=S6.VC_BLID) S7,(
SELECT E1.*,E2.VC_BLID AS E2_BLID,E2.VC_BSNAME AS E2_BSNAME,E2.I_ASC AS E2_ASC,
E2.FL_POINTX AS E2FL_POINTX,E2.FL_POINTY AS E2FL_POINTY
    FROM (
   SELECT VC_BLID AS E1_BSID,B.I_ID AS E1_ID,A.VC_BSNAME AS E1_BSNAME,A.I_ASC AS E1_ASC,
A.FL_POINTX AS E1FL_POINTX,A.FL_POINTY AS E1FL_POINTY,
B.VC_LOC_NAME AS END_NAME,B.FL_POINTX AS END_POINTX,B.FL_POINTY AS END_POINTY
                 FROM BUS_BUSSITEB A,LOCATION_SITE B
                      WHERE (VC_LOC_NAME='星海广场')
AND Sqrt((A.FL_POINTX-B.FL_POINTX)*(A.FL_POINTX-B.FL_POINTX)+
(A.FL_POINTY-B.FL_POINTY)*(A.FL_POINTY-B.FL_POINTY))<=0.003
  ) E1,BUS_BUSSITEB E2
    WHERE E1_BSID=E2.VC_BLID
) E3
  WHERE Sqrt((E2FL_POINTX-S6_POINTX)*(E2FL_POINTX-S6_POINTX)+
(E2FL_POINTY-S6_POINTY)*(E2FL_POINTY-S6_POINTY))<=0.003

解决方案 »

  1.   

    Bus_BusSite站点表存储公交站点
    Bus_LinePoint线路表存储公交运行路径
    Location_Site存储目标地址查找二次换乘时的线路!
      

  2.   

    Sqrt((A.FL_POINTX-B.FL_POINTX)*(A.FL_POINTX-B.FL_POINTX)+ 
    (A.FL_POINTY-B.FL_POINTY)*(A.FL_POINTY-B.FL_POINTY)) ---这儿做个视图
      

  3.   

    就简单两张表做查询 你搞这么多层SELECT嵌套干什么! 不嵌套不能SELECT了?
      

  4.   

    排了两边格式 不能保证正确 你的语句也有错误地方 倒数第四行 "select ... E1, E2 WHERE E1_BSID=E2.VC_BLID"  E1_BSID怎么理解? SELECT S7.*,E3.* 
    FROM S3,A,A, S7, E3 
    WHERE Sqrt(...) <=0.003 and 
    A.VC_BLID NOT IN(S00) and
    A.BLID=A.VC_BLID
      
    SELECT ... FROM S1, A S2 WHERE S1.=..) S3
    SELECT ... FROM  A, B WHERE (VC_LOC_NAME='码头') AND Sqrt(...) <=0.002 ) S00
    SELECT ... FROM A, B WHERE (VC_LOC_NAME='星海广场') AND Sqrt(...) <=0.003 and BSID = A.VC_BLID E3  
      

  5.   

    SELECT S7.*,E3.* 
    FROM S3,A S5,A S6, S7, E3 
    WHERE Sqrt(...) <=0.003 and 
    S4.VC_BLID NOT IN(S00) and
    S4_BLID=S6.VC_BLID上述语句可以进一步简化为SELECT S7.*,E3.* 
    FROM S7,E3 WHERE Sqrt(...)<=0.003
    E3中已包含where条件 S7是S4与S6进行Select+where条件 而S4和S6都是A表!因此S7直接简单为select .. from A where 最后我的结论是 你的语句基本没有意义 需要找个人重新帮你写!