现有:人员表,部门表,权限点表,角色表,角色_权限点表,角色_人员/部门表六张表。
人员表与部门表关联,权限点表与角色_权限点表关联,角色表与角色_权限点表,角色表与角色_人员/部门关联,人员表与角色_人员/部门表,部门表与角色_人员/部门表关联。角色_人员/部门表中通过一个字段来区别是关联的人员还是部门(S:表示人员,D:表示部门)
部门可能包含子部门(查询时要查询该部门下的所有下级部门中的人员级下级部门所拥有的权限)。
现在有四个查询条件:权限点,角色,部门,人员。
要得到的结果是:人员姓名,人员编号,已授权限(不要重复)请各位大哥大姐们帮忙。谢谢各位了。

解决方案 »

  1.   

    人员表[STAFF_INFO]:STAFF_ID  STAFF_NO  STAFF_NAME STAFF_DEPT_ID
      1      S000001     张三       2
      2      S000002     李四       3
      3      S000003     王五       4
      4      S000004     赵六       5
      5      S000005     赵六1      7
      6      S000006     赵六2      3
      7      S000007     赵六3      6
      8      S000008     赵六4      8部门表[DEPT_INFO]:DEPT_ID   DEPT_NO   DEPT_NAME  DEPT_PARENT_ID
      1      D000001    总公司       0
      2      D000002    A公司        1
      3      D000003    B公司        1
      4      D000004    A部门1       2
      5      D000005    A部门2       2
      6      D000006    B部门1       3
      7      D000007    B部门2       3
      8      D000008    C部门1       4权限点表[RIGHT_INFO]:RIGHT_ID   RIGHT_NAME  RIGHT_PARENT_ID
      1       A模块         0
      2       A模块新增       1
      3       A模块修改       1
      4       A模块删除       1
      5       B模块           0
      6       B模块新增       5
      7       B模块修改       5
      8       B模块删除       5角色表[ROLE_INFO]:ROLE_ID   ROLE_NAME  
      1      系统管理员         
      2     A模块维护人员       
      3     A模块录入人员       
      4     B模块维护人员       
      5     B模块录入人员                 角色与权限点表[ROLE_RIGHT_INFO]:RRI_ID    RRI_ROLE_ID    RRI_RIGHT_ID
       1            1             2
       2            1             3
       3            1             4
       4            1             6
       5            1             7
       6            1             8
       7            2             2
       8            2             3
       9            2             4
      10            4             6
      12            4             7
      13            4             8角色与人员/部门表[ROLE_STAFF_OR_DEPT_INFO]:RSD_ID    RSD_ROLE_ID   RSD_STAFF_OR_DEPT_ID RSD_IS_STAFF_OR_DEPT
      1             1             1                     S
      2             2             2                     S
      3             2             3                     D
      4             4             4                     D以上是表结构。
    结询结果生成的表是:
    序号(生成)  人员姓名   人员编号     已授权限
      

  2.   

    能不能一条SQL语句查询出某个部门及其下级部门的ID(下级级数不确定)?
      

  3.   


    -- 查出A公司所有的一级部门ID:select dept_id from dept_no 
    start with dept_name = 'A公司'
    connect by prior dept_id = dept_parent_id order by dept_id
      

  4.   

    -- (不理解你部门上下级关系是什么,是为权限的向上累加??)
    -- 下面是没有上下级部门关系的写法:
    SQL> SELECT f.STAFF_NO "人员编号",f.STAFF_NAME "人员姓名",c.RIGHT_NAME "已授权限"
      2    FROM ROLE_RIGHT_INFO a,ROLE_INFO b, RIGHT_INFO c,
      3         DEPT_INFO d,ROLE_STAFF_OR_DEPT_INFO e,STAFF_INFO f
      4   WHERE b.ROLE_ID = a.RRI_ROLE_ID(+)
      5         AND a.RRI_RIGHT_ID = c.RIGHT_ID(+)
      6         AND d.DEPT_ID = e.RSD_STAFF_OR_DEPT_ID(+)
      7         AND e.RSD_IS_STAFF_OR_DEPT(+) = 'D'
      8         AND e.RSD_STAFF_OR_DEPT_ID = b.ROLE_ID(+)
      9         AND f.STAFF_DEPT_ID = d.DEPT_ID(+)
     10  ORDER BY f.STAFF_ID
     11  /人员编号             人员姓名             已授权限
    -------------------- -------------------- --------------------
    S000001              张三                 B模块新增
    S000001              张三                 B模块修改
    S000001              张三                 B模块删除
    S000002              李四                 
    S000003              王五                 
    S000004              赵六                 
    S000005              赵六1                
    S000006              赵六2                
    S000007              赵六3                
    S000008              赵六4                10 rows selectedSQL> 
      

  5.   

    需求没有太清楚,如果简单列出人员的权限的话,楼主再把需求说清楚一点肯定可以写出来的,只不过可能SQL嵌套的层会比较多而已
      

  6.   

    本部门与上级部门要用到 start with 与 connect by(树型查找)啊,
    真是太难了,不过很有价值。
      

  7.   

    外资软件公司高薪诚聘天津 BI及Siebel 人才!BI工程师:
    一 有 Informatica经验
    二 2年以上相关经验
    三 英文良好 至少能英文面试
    四 做GE 的项目,要求熟悉informatic,数据仓库存储,数据转换,懂oracle pl/sql,,英文可以工作交流 Siebel工程师:
    Siebel technical areas (Configuration/scripting/workflows). We would like to deploy 1/2 sr associate to start with and then gradually train 1-2 exp. Java/PLSQL associate to further build the team.有意者请发中英文简历至[email protected].谢谢!
      

  8.   


    SQL> 
    SQL>  select tab.人员编号, tab.人员姓名, t.right_name 已授权限
      2     from (select distinct rri_right_id 已授权限,
      3                           --    rri_role_id,
      4                           c.staff_name 人员姓名,
      5                           c.staff_no   人员编号
      6             from role_right_info a, role_staff_or_dept_info b, staff_info c
      7            where a.rri_role_id = b.rsd_role_id
      8              and rsd_is_staff_or_dept = 'S'
      9              and c.staff_id = b.rsd_staff_or_dept_id
     10           union
     11           select distinct rri_right_id 已授权限,
     12                           --    rri_role_id,
     13                           c.staff_name 人员姓名,
     14                           c.staff_no   人员编号
     15             from role_right_info         a,
     16                  role_staff_or_dept_info b,
     17                  staff_info              c,
     18                  dept_info               d
     19            where a.rri_role_id = b.rsd_role_id
     20              and rsd_is_staff_or_dept = 'D'
     21              and c.staff_dept_id = d.dept_id
     22              and d.dept_id = b.rsd_staff_or_dept_id) tab,
     23          right_info t
     24    where tab.已授权限 = t.right_id
     25    order by tab.人员编号;人员编号 人员姓名   已授权限
    -------- ---------- ----------------
    S000001  张三       A模块新增
    S000001  张三       A模块修改
    S000001  张三       A模块删除
    S000001  张三       B模块新增
    S000001  张三       B模块删除
    S000001  张三       B模块修改
    S000002  李四       A模块新增
    S000002  李四       A模块修改
    S000002  李四       A模块删除
    S000003  王五       B模块新增
    S000003  王五       B模块删除
    S000003  王五       B模块修改
    S000006  赵六2     A模块新增
    S000006  赵六2     A模块删除
    S000006  赵六2     A模块修改15 rows selectedSQL>