比如我现在有个表,字段为:
id, name,father_id 
 1    a      0
 2    a1     1
 3    a2     2
怎样删除 id = 1 的记录时,将关联的另两条记录也删除掉啊?

解决方案 »

  1.   

    昨天下午想了一个下午,终于实现了。但是总觉得方法比较麻烦,刚开始用触发器,但是触发器不能递归,还造成了死锁,后来想自己写个递归,但技术有限,没弄出来。最后用这样的方法实现了。(函数结合存储过程)
    首先,写一个函数 查询父id 不存在的记录条数。出于这样的考虑,当根据id 删除一条记录后,子节点将找不到父id 。
          create or replace function F_GET_WJJ_COUNT(wjj_id NUMBER) return number is
          Result number;
          begin
          select count(*) into Result from k_wjj where fwjj_id not in (select distinct id from k_wjj) and fwjj_id<>0  ;
          return(Result);
          end F_GET_WJJ_COUNT;
    我数据库中的表跟上面的表不太一样,但结构和内容相同。id 表示主键id ,fwjj_id 代表父id。
    然后,用存储过程:
          
          create or replace procedure K_P_DEL_WJJ(ID NUMBER) is
          wj_id number;
           begin
           wj_id := id ;
           delete from k_wjj where id = wj_id;
           commit;
        if(F_GET_WJJ_COUNT(wj_id)>0) then
         loop
            delete from k_wjj where fwjj_id not in (select distinct id from k_wjj) and fwjj_id<>0  ;
            commit;
         exit   when(F_GET_WJJ_COUNT(wj_id)=0);
         end loop;
      end if;
    end K_P_DEL_WJJ;
    功能是实现了,大家看有没有什么好的方法或者改进意见?
      

  2.   

    就你这个情况,
    累不累? 用得着那么复杂吗?
    delete from  xxx where id in (select id from xxx start with id=xxx connect by fid=prior id)