当前位置: 代码迷 >> Oracle开发 >> 有个SQL语句,不太会写,望高手指教解决方法
  详细解决方案

有个SQL语句,不太会写,望高手指教解决方法

热度:103   发布时间:2016-04-24 07:28:01.0
有个SQL语句,不太会写,望高手指教
是这样的,有4张表:wh_user(用户表)、wh_group_user(用户分组表)、wh_group_function(组功能点表)、wh_function(功能点列表)
wh_user的结构是:user_id,user_name,pwd
wh_group_user的结构是:user_id,group_id
wh_group_function的结构是:group_id,function_id,add,modify(后面还有,就假设只考虑添加、修改权限)
wh_function的结构是:function_id,function_name....(这张表的功能点不会重复)

在分组中分配功能点的时候,可以按需求分配功能点,并且对功能点的add,modify授权(0表示不可用,1表示可用)

现在假设有用户000001,属于分组GroupA和GroupB,相关各表的数据如下:
wh_user表:
user_id user_name
 000001 用户1

wh_group_user表:
user_id group_id
 000001 GroupA
 000001 GroupB

wh_function表:
function_id function_name .....
  F1 功能点1
  F2 功能点2
  F3 功能点3

wh_group_function表:
group_id function_id add modify ......
 GroupA F1 0 1
 GroupA F2 1 0
 GroupA F3 0 1
 GroupB F1 1 0 


现在想查询用户000001的权限,按功能点来显示就行了,比如上面的情况,我期望的结果是
user_id function_id add modify .....
 000001 F1 1 1
 000001 F2 1 0
 000001 F3 0 1

就是不知道能不能查询出这样的结果,望高手指教下!谢谢


------解决方案--------------------
SELECT gu.user_id,gf.function_id, SUM(gf.add) add, SUM(gf.modify) modify
FROM WH_GROUP_USER gu, WH_GROUP_FUNCTION gf
WHERE gu.group_id = gf.group_id
AND gu.user_id = '000001'
GROUP BY gu.user_id, gf.function_id;
------解决方案--------------------
SQL code
select user_id,function_id,max(add),max(modify)from wh_group_user ajoin wh_group_function bon a.group_id = b.group_idgroup by user_id,function_id
  相关解决方案