表A,用来记录某几个字段变更日志,例:日期          原值            目标值
2010-1-1      XXX             YYY
2010-5-1      YYY             ZZZ
2010-1-1      AAA             BBB其中第1,2行是经过两次转换的,有什么语句可以得到如下的结果:原值            目标值
XXX             ZZZ
AAA             BBB即说明,现在的ZZZ最早是从XXX转换而来的。

解决方案 »

  1.   

    不一定,递归的语法忘了,好像是
    ...
    start with
    conect by..你自己搜搜看,我想不用过程可以搞定
      

  2.   

    select connect_by_root(old),new from table a start with not exists(select 1 from
    table b where b.new=a.old) where connect_by_isleaf=1
    connect by prior a.new=a.old 
      

  3.   


    楼上快哦WITH a AS(
    SELECT '2010-1-1' rq,'XXX' yz,'YYY' mbz FROM dual
    UNION ALL
    SELECT '2010-5-1' ,'YYY' ,'ZZZ' FROM dual
    UNION ALL
    SELECT '2010-1-1' ,'AAA' ,'BBB' FROM dual
    )
    SELECT CONNECT_BY_ROOT(yz),mbz FROM a
    WHERE CONNECT_by_isleaf=1
    START with NOT  EXISTS(select 1 from a b where b.mbz=a.yz)
    CONNECT BY PRIOR mbz=yz
      

  4.   

    都是牛X,不过改成我的表后有个错误提示:ORA-01436: CONNECT BY loop in user data是不是数据有什么问题?我的表里其实还有个字段NUM,例子中只是其中一个NUM的数据。
      

  5.   

    select connect_by_root(old),new from table a start with not exists(select 1 from
    table b where b.new=a.old) where connect_by_isleaf=1
    connect by nocycle prior a.new=a.old