【问题标题】:How to get list of branch_id that is not the same of Max Permissions?如何获取与 Max Permissions 不同的 branch_id 列表?
【发布时间】:2019-11-02 20:50:24
【问题描述】:

上面附的是示例表结构。该表由user_id、branch_id和permission_id 3列组成。

我有一个给定的每个user_id的最大权限,其中它包含branch_id(用户的分支权限)中某个user_id的多个权限(permission_id)

这里的主要问题是我不知道如何获取与给定Max Permissions权限不同的所有分支(branch_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)

你会注意到我写了一个特定的 user_id (18) 和 branch_id (39)。 我做了一段 SQL 查询来查找每个用户的最大长度的 branch_id。

请帮助我。先谢谢大家了!!!

【问题讨论】:

    标签: sql sql-server optimization


    【解决方案1】:

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

    select bpu.*
    from branch_permission_user bpu
    where user_id = 18 and
          permission_id not in (1, 2, 3, . . . );  -- list goes here
    

    您可以使用count(distinct) 计算分支:

    select count(distinct branch_id)
    from branch_permission_user bpu
    where user_id = 18 and
          permission_id not in (1, 2, 3, . . . );  -- list goes here
    

    【讨论】:

      【解决方案2】:

      我通过获取最小权限长度的 branch_id 并使用 where in 子句解决了我的问题。如果不。结果为0,则相同。

      这是我所做的 SQL 查询:

      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 )
      

      【讨论】:

        猜你喜欢
        • 2021-06-21
        • 2022-01-13
        • 2021-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-26
        • 1970-01-01
        • 2020-05-27
        相关资源
        最近更新 更多