代码之家  ›  专栏  ›  技术社区  ›  nuuse

如果用户在postgresql中具有特定角色,则返回值0、1或2

  •  0
  • nuuse  · 技术社区  · 8 年前

    我有一个C程序,用户通过LinQConnect登录。

    select rolname 
    from pg_user a
    join pg_auth_members b on (a.usesysid=b.member)
    join pg_roles c on (c.oid=b.roleid)
    where
    a.usename='USERNAME'
    

    如果用户在角色“RoleA”中,我想返回1,如果用户在角色“RoleB”中,我想返回2,如果他同时在这两个角色中,我无论如何都想重新运行2,如果用户不在这两个角色中,我想返回0。

    我知道我可以只检查代码中返回的角色,然后返回具体的数字,但我可以得到查询返回的0、1或2吗?

    编辑:

    我补充道:

    max(case when rolname = 'RoleA' then '1'
         when rolname = 'RoleB' then '2'
         else '0'
    end)   // added max(), now it returns only 2 if im in both Roles
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   Dmitrij Kultasev    8 年前

    我认为这应该管用-

        MAX(CASE WHEN rolname = 'RoleA' THEN '1'
                 WHEN rolname = 'RoleB' THEN '2'
                 WHEN COUNT(rolname) = 2 THEN '2'
                 ELSE '0'
             END)
    

    虽然我还没有试过,但我认为它应该有效。