sql—如何检查返回多行的查询是否包含多个值中的一个?

px9o7tmv  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(294)

我有个用户角色表,一个用户可以分配多个角色。我想要一个查询,它将检查一个特定的用户是否分配了'管理员'或'超级管理员'角色(检查更多的角色可能需要在未来)。我尝试使用plsql来完成这项工作,为用户选择每个角色并将其传递给一个变量,然后检查这些选择的角色中是否有“admin”或“superadmin”。事情变得有点复杂了。我如何解决这个问题?

xzlaal3s

xzlaal3s1#

像这样的?

  1. SQL> with user_role (user_id, role) as
  2. 2 (select 1, 'admin' from dual union all
  3. 3 select 1, 'superadmin' from dual union all
  4. 4 select 2, 'clerk' from dual union all
  5. 5 select 2, 'superadmin' from dual union all
  6. 6 select 3, 'manager' from dual
  7. 7 )
  8. 8 select user_id,
  9. 9 max (case when role in ('admin', 'superadmin') then 'yes' else 'no' end ) is_admin
  10. 10 from user_role
  11. 11 group by user_id
  12. 12 order by user_id;
  13. USER_ID IS_ADMIN
  14. ---------- ----------
  15. 1 yes
  16. 2 yes
  17. 3 no
  18. SQL>
展开查看全部
vu8f3i0k

vu8f3i0k2#

如果需要特定用户,可以执行以下操作:

  1. select (case when exists (select 1
  2. from user_role ur
  3. where ur.role in ('admin', 'superadmin') and user_id = :user_id
  4. )
  5. then 'yes' else 'no'
  6. end) as has_role
  7. from dual

相关问题