Sql 如何获取与最大权限不同的分支id列表?

Sql 如何获取与最大权限不同的分支id列表?,sql,sql-server,optimization,Sql,Sql Server,Optimization,上面附的是示例表结构。该表由3列用户id、分支机构id和权限id组成 我有一个给定的每个用户\u id的最大权限,其中它包括分支\u id(用户的分支权限)中特定用户\u id的多个权限(权限\u id) 这里的主要问题是,我不知道如何获取与给定的最大权限不相同的所有分支(分支id) 我提出了一个问题,但不幸的是,我无法解决这个逻辑问题 以下是我提出的问题: SELECT COUNT(DISTINCT branch_id) AS all_branch FROM branch_pe

上面附的是示例表结构。该表由3列用户id、分支机构id和权限id组成

我有一个给定的每个用户\u id的最大权限,其中它包括分支\u id(用户的分支权限)中特定用户\u id的多个权限(权限\u id)

这里的主要问题是,我不知道如何获取与给定的最大权限不相同的所有分支(分支id)

我提出了一个问题,但不幸的是,我无法解决这个逻辑问题

以下是我提出的问题:

    SELECT COUNT(DISTINCT branch_id) AS all_branch
    FROM branch_permission_user
    WHERE 
        USER_ID = 18 AND
        permission_id NOT IN (
            SELECT permission_id
            FROM branch_permission_user
            WHERE
                USER_ID = 18 AND
                BRANCH_ID = 39)
SELECT COUNT(DISTINCT branch_id) as branch_length
FROM branch_permission_user
WHERE 
    user_id = 18 AND
    permission_id NOT IN (
        SELECT permission_id
        FROM branch_permission_user
        WHERE 
            user_id = 18 AND 
            branch_id = 39 )
您会注意到,我编写了一个特定的用户id(18)和分支id(39)。 我做了一个SQL查询来查找每个用户的最大长度的分支id


请帮帮我。提前谢谢大家

如果要查找不在用户可用权限列表中的行,可以使用:

select bpu.*
from branch_permission_user bpu
where user_id = 18 and
      permission_id not in (1, 2, 3, . . . );  -- list goes here
您可以使用
count(distinct)
对分支进行计数:


我通过获取最小许可长度的分支id并使用where in子句解决了我的问题。如果结果的编号为0,则相同

下面是我所做的SQL查询:

    SELECT COUNT(DISTINCT branch_id) AS all_branch
    FROM branch_permission_user
    WHERE 
        USER_ID = 18 AND
        permission_id NOT IN (
            SELECT permission_id
            FROM branch_permission_user
            WHERE
                USER_ID = 18 AND
                BRANCH_ID = 39)
SELECT COUNT(DISTINCT branch_id) as branch_length
FROM branch_permission_user
WHERE 
    user_id = 18 AND
    permission_id NOT IN (
        SELECT permission_id
        FROM branch_permission_user
        WHERE 
            user_id = 18 AND 
            branch_id = 39 )