请教一个技术问题
tb_c 表中存在(id,vislist,dept)
t_user表中存在(id,name,deptid)
vislist 是t_user(id)的集合
请问我怎么样用语句更新tb_c中的dept
注意:dept可能为单个depetid,也可能为deptid的集合组
若是为集合组则要求类似于(1,2,21,20)这样的表示 
 

解决方案 »

  1.   

    原来tb_c中的数据可能为
    id    vislist    dept
    1       1,20,25 
    2       2,3,4
    3       1
    t_user中的数据可能为 
    id    name  deptid
    1     李      01
    2     王      02
    3     赵      04 
    4     刘      09 
    5     孙      10
    20    周      01
    25    马      02那么就一个SQL语句或者其他方法
    实现对tb_c中dept的更新,实现的效果为
    id    vislist    dept
    1       1,20,25  01,01,02
    2       2,3,4    02,04,09
    3       1        01
      

  2.   

    不太明白
    dept代表什么意义,你取的值是怎么来的啊?与其他的值有关联不?
      

  3.   

    其实就是字段的连接如何实现,我把连接写好了,你自己写uodate语句吧!
    create table tb_c(id varchar(2),        vislist varchar(20),        dept varchar(20),
    constraint PK_tb_c primary key (id)
    );
    create table t_user(id varchar(2),        name      varchar(20),        deptid  varchar(20),
    constraint PK_t_user primary key (id)
    );下面把你的数据插入......
    function如下create or replace function Link(sWhere varchar2,sType varchar2) 
    return varchar2
    is  
        str varchar2(500); 
        sReturn varchar2(50);
        UnionReturn varchar2(2000);
        type cursor_type is ref cursor;
        c1 cursor_type;
    begin 
        str:='select tu.deptid from tb_c tc,t_user tu where '',''||tc.vislist||'','' like ''%,''||tu.id||'',%'' and tc.id='||sWhere||' order by tc.id';
        --DBMS_OUTPUT.put_line('str='||str);
        open c1 for str;
        loop 
        fetch c1 into sReturn;
        exit when c1%notfound;
        UnionReturn:=UnionReturn||sType||sReturn;
        end loop;  
        UnionReturn:=ltrim(UnionReturn,sType);
        --DBMS_OUTPUT.put_line('UnionReturn='||UnionReturn);
        return  UnionReturn;  
    end ;最后是sqlselect tc.*,tu.*,Link(tc.id,',') from tb_c tc,t_user tu 
    where ','||tc.vislist||',' like '%,'||tu.id||',%'
    ;