有个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