SQL? “向我展示用户X可以执行的所有活动。”

时间:2010-04-20 00:55:36

标签: sql

我的智慧结束了。我疯狂地搜索,阅读了大量的数据库教科书,上帝知道有多少在线指南,博客和论坛。有人能让我摆脱困境吗?

PseudoSchema Diagram(警告:虽然很漂亮,但不是采用甚至远程接近ER图的格式!主键是粗体,外键是斜体。)

鉴于上述一组表将用户与组关联到权限,然后是一组可以各自需要权限执行的活动,您如何找到这个:

显示用户X可以执行的所有活动。即:用户X是G组和F组的成员;组G和F与特权P,Q,R和S相关;告诉我所有需要P,Q,R或S 特权的活动。

你是怎么做到的?

2 个答案:

答案 0 :(得分:1)

 SELECT DISTINCT Activity.id, Activity.name, Activity.description 
    FROM Activity 
    INNER JOIN Privilege ON Activity.requires_privilege = Privilege.id
    INNER JOIN Group ON Privilege.group_id = Group.id
    INNER JOIN UserGroup ON Group.id = UserGroup.group_id
 WHERE UserGroup.user_id = :X

应该得到你想要的。还有其他选择。

答案 1 :(得分:0)

select a.*
from user u
inner join usergroup ug on u.id = ug.user_id
inner join privilege p on ug.group_id = p.group_id
inner join activity a on p.id = a.requires_privilege
where u.name = 'X'