日期:2014-05-17  浏览次数:20822 次

有个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 a
join wh_group_function b
on a.group_id = b.group_id
group by user_id,function_id