跟公交换乘有点类似的路由算法
A点     B点
广州    深圳
深圳    珠海
江门    珠海
东莞    深圳
湛江    江门现在我想从广州到东莞,那就有 广州——》深圳——》东莞
广州到江门:广州——》深圳——》珠海——》江门有没有哪位兄弟接触过这种算法,指导一下。

解决方案 »

  1.   

    oracle中有一个connect by递归查询,查一下相关用法,应该能解决你的问题
      

  2.   

    SQL> 
    SQL> --广州->江门,其它替换起止地
    SQL> with test as (
      2    select '广州' A, '深圳' B from dual union all
      3    select '深圳' A, '珠海' B from dual union all
      4    select '江门' A, '珠海' B from dual union all
      5    select '东莞' A, '深圳' B from dual union all
      6    select '湛江' A, '江门' B from dual),
      7    tt as (
      8    SELECT a, b
      9      FROM test
     10    UNION ALL
     11    SELECT b, a FROM test)
     12  SELECT p
     13    FROM (SELECT LEVEL lv, tt.*, '广州'||sys_connect_by_path(b, '->') p
     14            FROM tt
     15           WHERE b <> '广州'
     16           START WITH a = '广州'
     17          CONNECT BY nocycle PRIOR tt.b = tt.a)
     18   WHERE p LIKE '%->江门';
     
    P
    --------------------------------------------------------------------------------
    广州->深圳->珠海->江门
     
    SQL>