代码之家  ›  专栏  ›  技术社区  ›  Paul Tomblin

SQL连接并聚合多个表

  •  0
  • Paul Tomblin  · 技术社区  · 15 年前

    我有以下表格:

    users
     - userid
     - real name
     - other stuff
    
    roles
     - roleid
     - description
     - other stuff
    
    functions
     - functionid
     - description
    
    screens
     - screenid
     - description
    

    user_roles
     - userid
     - roleid
    

    每个角色都可以编辑、查看或不访问由表控制的给定函数

    role_functions
    - roleid
    - functionid
    - status
    

    status

    function_screens
     - functionid
     - screenid
    

    现在我正在使用一堆Java代码和映射的映射来完成所有这些查找,但是我想知道是否有更简单的方法在SQL脚本中完成它。

    1 回复  |  直到 15 年前
        1
  •  4
  •   Paul Tomblin    15 年前

    select s.screenid, s.description
    , CASE MAX(CASE rf.status WHEN 'E' THEN 2 WHEN 'V' THEN 1 ELSE 0 END)
        WHEN 2 THEN 'E'
        WHEN 1 THEN 'V'
        ELSE 'N' END as status
    from user_roles ur
    join role_functions rf on rf.roleid = ur.roleid
    join function_screens fs on fs.functionid = rf.functionid
    join screens s on s.screenid = fs.screenid
    where ur.userid = :theuser
    group by s.screenid, s.description
    order by s.screenid