oracle数据库我有一张工作表EXT第一个字段是可以执行这条任务的人员编号字段名userId可能是多个也可能是一个(例如:001,002,003多个以逗号分割)我还有一张员工表emp,员工表中有个员工编号empCde,我要将两个表关联查询以员工编号连接(select * from emp p,ext t where p.empCde=t.userId ),可是问题是多个可以执行人的任务对应不出来(比如:empCde='001',userId='001,002'),请问这种联合查询怎么写,我要取emp表中离职的即valid字段值是0的。十分感谢O(∩_∩)O谢谢!!

解决方案 »

  1.   

    说一下表结构,和你的预期结果,用 excel 画一下吧,看起来更清楚;
      

  2.   

    用 regexp_substr()把逗号分隔的列变成多行,形成结果集ext1后,再与emp结果集进行联合查询。regexp_substr()可以百度查询一下用法
      

  3.   

    select  * from emp p,ext t where t.userId like '%'|| p.empCde ||'%'
      

  4.   

    create table ext(userid varchar2(32),worktype varchar2(32));
    create table emp(empcde varchar2(32),workername varchar2(32));insert into ext(userid,worktype) values('001,002','工作1');
    commit;
    insert into ext(userid,worktype) values('001','工作2');
    commit;
    insert into emp(empcde,workername) values('001','张三');
    commit;
    insert into emp(empcde,workername) values('002','李四');
    commit;
    /*
    这种做法首先 不会出现 下述情况
    员工a  001  员工b  1001  a和b出现重复的地方
    */
    select * from ext a,emp b where instr(a.userid,b.empcde) >= 1 /*你说的这种问题  一个员工可以有多个工作  一个工作也可以由多个员工做  
    最好分三张表来处理 
    一张 员工表  一张工作表  加上一张关系表  可以更好地处理这种多对多的关系*/