有四个表
1 员工表 Employee,字段EmployeeNO(员工编号),EmployeeName(员工姓名)。
2 部门表Dept, 字段DeptNO(部门编号),DeptName(部门名称)。
3 职务表Business,字段BusinessNO(职务编号),BusinessName(职务名称),DeptNO(部门编号)。
4 职务对应表BusinessMember,字段BusinessMemberID(职务对应ID),BusinessNO(职务编号),
                       EmployeeNO(员工编号)。
(注:一个员工可以在"职务对应表"中有多条记录)
要求得到按部门分组的所有员工,结果集中字段"   EmployeeNO, EmployeeName, DeptNO,DeptName ",
且员工记录不允许重复。select  e.EmployeeNO,e.EmployeeName, d.DEPTNO,d.DEPTNAME  from Employee e,Dept d 
     where EmployeeNo in (select   DISTINCT BusinessMember.EmployeeNO  from BusinessMember
      where BusinessMember.BusinessNO in 
      (select BusinessNO from Business where DEPTNO=d.DEPTNO)) order by d.DEPTNO asc我这样写只能得到在BusinessMember中有的员工,且有的员工重复,(也就是有的员工在两个部门的不同职务上兼职)
而我现在还无法得到那些还没分配职务的员工,(也就是在BusinessMember没有对应记录)。

解决方案 »

  1.   

    select d.EmployeeNO,d.EmployeeName,a.DEPTNO,a.DEPTNAME  from 
    Dept a,Business b,BusinessMember c,Employee d
    where a.DeptNO = b.DeptNO 
    and b.BusinessNO = c.BusinessNO
    and c.EmployeeNO(+) = d.EmployeeNO
      

  2.   


    Select Tmp1.EmployeeNO,Tmp1.EmployeeName,Tmp2.DEPTNO,Tmp2.DEPTName From 
      (Select Distinct a.EmployeeNO,EmployeeName,BusinessNO From 
            Employee a,BusinessMember b where a.EmployeeNO*=b.EmployeeNO)Tmp1,
      (Select Distinct a.DEPTNO,a.DEPTName ,BusinessNO From 
            Dept a,Business b where a.DEPTNO=b.DEPTNO)Tmp2
      where Tmp1.BusinessNO *=Tmp2.BusinessNO 不过我觉得你这样设计表不是很合理,你应该把部门编号放在员工表里面,这样会好一点.
    如果象你那样设计的话根本不知道员工是属于那个部门的.
      

  3.   

    97866(weiLuang) :
    你写的‘*=’是什么意思呢?
      

  4.   

    select max(employeeno) employeeno,max(employeename) employeename,deptno,deptname from (
    select employeeno,(select employeename from employee where employeeno=a.employeeno) employeename ,(select deptno from dept where deptno=(select deptno from business where businessno=b.businessno from Business b)) deptno,(select deptname from dept where deptno=(select deptno from business where businessno=c.businessno from Business c)) deptname
    from businessmember a)
    group by deptno,deptname;对于以查询,若不准确查询数据,那对于楼主表结构表示质疑.另外以下是重新设计表结构:
    Employee(EmployeeNO,EmployeeName)
    Dept(DeptNO,DeptName)
    connect(deptno,employeeno,BusinessNO)--对于三者是多对多关系(即一个员工所对应多个部门多个职务,一个部门对应多个员工)
    Business(BusinessNO,BusinessName)
      

  5.   

    (+) =是标准SQL还是ORACLE自己有的呢?
      

  6.   

    标准的SQL不支持(+)的连接操作!!!