Sql 如何获取与最大权限不同的分支id列表?
上面附的是示例表结构。该表由3列用户id、分支机构id和权限id组成 我有一个给定的每个用户\u id的最大权限,其中它包括分支\u id(用户的分支权限)中特定用户\u id的多个权限(权限\u id) 这里的主要问题是,我不知道如何获取与给定的最大权限不相同的所有分支(分支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
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 )