从一对多表中选择计数

时间:2014-05-27 16:36:36

标签: sql sql-server select one-to-many

我正在使用MS SQL。

对于我的安全系统,我有一个访问组/权限,一个到多个表设置。为用户分配一个组。每个组可以拥有多种不同的权限。如果一个组具有特定权限,我需要一个select语句来检查(返回一个计数)。

我将为select语句提供的数据是User的GroupID和他们请求访问的permissionName。

逻辑上我需要的是:

  1. 获取permissionName的ID。 pID = SELECT permissionID FROM Permission_List WHERE permissionName = 'News'
  2. 检查Group_Permission表格以查看用户的GroupID是否与权利ID等于pID相交
  3. 如果计数为0,则该组无法访问。如果计数为1,则该组可以访问。(我将在PHP中处理此问题)
  4. TABLE:Group_List

    groupID     groupName       groupDesc
    1           Standard        Normal Access Level.
    2           Limited         Limited Access Level.
    3           Medium          Medium Access Level.
    

    TABLE:Permission_List

    permissionID    permissionName  permissionProtect   permissionDesc
    1               News            0                   News section access.
    2               Forums          0                   Forums section access.
    3               Contacts        0                   Contact section access.
    

    TABLE:Group_Permission

    groupID     permissionID
    1           1
    1           2
    1           3
    2           1
    3           1
    3           2
    

1 个答案:

答案 0 :(得分:0)

您应该能够JOIN这些表并使用COUNT聚合。对于此示例,我假设您正在提供组ID和权限名称。

SELECT COUNT(*)
FROM Group_Permission GP
    JOIN Permission_List PL ON GP.permissionId = PL.permissionId
WHERE PL.permissionName = 'News'
    AND GP.groupId = @someGroupId

如果count大于0,则该组的权限存在。