如何查找具有相同角色的不同访问权限的报告

时间:2014-09-09 10:03:51

标签: sql sql-server self-join

我的问题如下:我试图查看哪些用户可以访问具有相同权限的另一个报告但具有相同权限的报告。我使用的是SQL Server,而不是使用临时表。

表roles_definition的结构如下:

Role#, ReportName, AccessRight

因此,我想看看,如果角色,让我们说,管理员可以访问具有写访问权限的报告A,但无法访问具有相同权限的报告B.我想要它显示

 Administrator, Report A, Write

 Administrator, Report B, Write

我尝试了以下查询但没有成功。

SELECT 
    rd1.roleID, rd1.reportName, rd1.accessRight
FROM 
    roles_definition rd1
FULL OUTER JOIN 
    roles_definition rd2 ON rd1.roleID = rd2 .roleID
                         AND rd1.reportName <> rd2.reportName
WHERE 
    rd1.reportName IN ('Clients', 'Attachments')
ORDER BY 
    rd1.roleID, rd1.reportName;

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

尝试这样的事情:

SELECT rd1.roleID, rd1.reportName, rd1.accessRight
FROM roles_definition rd1
  INNER JOIN roles_definition rd2
  ON rd1.roleID = rd2 .roleID
        AND rd1.reportName > rd2.reportName
        AND rd1.accessRight != rd2.accessRight
WHERE rd1.reportName IN ('Clients', 'Attachments')
ORDER BY rd1.roleID , rd1.reportName;