表名:量距起点号  终点号    距离
II-20 III-1 350.583
III-1 III-2 1261.512
III-1 II-20 350.615
III-2 III-1 1261.501
III-2 D1 18.077如何去掉重复的边,例如:“II-20  III-1”和“III-1  II-20”只能算一条边,上表查询结果其边数为3,而不是5,这个SQL语句如何写

解决方案 »

  1.   

    create table tb(起点号 varchar(10), 终点号 varchar(10),   距离 decimal(18,3))
    insert into tb values('II-20' ,'III-1' ,350.583 )
    insert into tb values('III-1' ,'III-2' ,1261.512) 
    insert into tb values('III-1' ,'II-20' ,350.615 )
    insert into tb values('III-2' ,'III-1' ,1261.501) 
    insert into tb values('III-2' ,'D1'    ,18.077  )
    goselect m.* from tb m , tb n where m.起点号 = n.终点号 and m.终点号 = n.起点号 and m.起点号 > m.终点号
    union all
    select m.* from tb m where not exists(select 1 from tb n where m.起点号 = n.终点号 and m.终点号 = n.起点号)drop table tb/*
    起点号        终点号        距离                   
    ---------- ---------- -------------------- 
    III-1      II-20      350.615
    III-2      III-1      1261.501
    III-2      D1         18.077(所影响的行数为 3 行)
    */
      

  2.   

    select 起点号,终点号 from 量距  where 起点号>终点号
    union 
    select 终点号,起点号 from 量距  where 起点号<=终点号
      

  3.   

    select count(*) cnt from 量距 a left join 量距 b on (a.起点号<>b.终点号 or (a.起点号=b.终点号 and a.终点号 <> b.起点号))
      

  4.   

    delete m where 起点号 in (
    select m.起点号  from tb m , tb n where m.起点号 = n.终点号 and m.终点号 = n.起点号 and m.起点号 < m.终点号)抄dawugui的! :)
      

  5.   

    以后再加上 primary key (起点号,终点号) check (起点号 >终点号) check(距离 >0)防止出现重复劳动