有个列表如下
列名   依赖列
 A       B
 B       C
 D       E
 C       F
 F       E
 A       M求怎样获得按依赖关系先后顺序的创建列表

M
A
B
C
...

解决方案 »

  1.   

    列名   依赖列
     A       B A       M那么B和M相对于A是平等的。
    为什么你的输出一个在a上一个在a下。
    命题有问题。
      

  2.   

    如果是单一父子关系,则可以使用递归方法找出来,不过需要的是数据多加一标识字段,临时的也无所谓.列名    依赖列        标识种子
    ------------------------------
    a        b             0
    b        c             0
    c        d             0
    d        e             0
    e        n/a(null)     0
    首先查询底阶得e,将e取出并设置[标识种子]为1
    递归调用返回一阶到d取出并置1,依此类推.当然在这种情况下如果只有一依赖链,那么就不需要标识,只有多个的时候需要标识.procedure FindDependent(Node:TNode,Table:TTable);
    begin
       Table.Seek(Node,[列名]);
       if Table.[依赖列] is null then
       begin
          print(Table.[列名]);
          Exit;
       end;
       FindDependent(Table.[依赖列],Table);
       print(Table.[列名]);
    end
      

  3.   

    也可以这样做了  建立一个TMP表, 然后找出所有不依靠的列,这个是最顶的了
      在TMP表删除依赖列为刚才的不依靠的列, 继续循环,得到二楼,三楼,N搂数据
    呵呵
      

  4.   

    To  unsigned :
      如果非单一依赖关系呢,比如a以来b,a又依赖于c
    To netfly:
      这个办法我也想过,不过对于非单一依赖关系,就不好判断了
      

  5.   

    应该没有关系的了,这样的找法,每次去掉的都是当前最顶层的了,去掉最顶层后
    用   select  依赖列 from #tmp where 依赖列 not in (select 列名 from #tmp)
    这样得到的一定是新的顶层。如果有数据,用上面的选不出来,说明定义有循环了,应该是定义错了
      

  6.   

    To Netfly:
      这个问题固然能解决,但是不同层次之间的依赖关系如何处理呢?
    难道没有人会依赖算法吗?
      

  7.   

    说穿了是一个很老套的问题吧
    Table1:
    Parent        Child
    null           A
    A              B
    A              D
    B              C
    ...
    要弄个树出来吧。
    记得有这样的控件叫DBTreeview。
    如果是Oracle的话,还可以SQL语句直接整理出来
    select Parent, Child, LEVEL from Table1 CONNECT BY PRIOR Child= Parent