`
sxdtzhaoxinguo
  • 浏览: 214800 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

使用INNER JOIN ON 多表关联查询,获取指定用户下指定权限的资源SQL:

 
阅读更多

摘要:最近在看一个开源框架,其中用户,角色,资源,这块我感觉比较重要,所以就自己也模仿着写了下,其中在获取指定用户下的权限资源的时候遇到问题了,开始时,我首先想到的方法就是通过用户->角色->资源,然后返回到前台进行遍历,但是感觉这样比较麻烦,后来再想想,其实可以通过关联查询的方式一次性查出指定用户下的权限范围内的资源列表,所以下面我就写一个我的关联查询的SQL语句:

一:写关联查询的SQL语句之前先上个图,把用户,角色,资源的关系看一下,如下图:


二:下面就附上我的关联查询的SQL语句,这里主要查询的表包括:用户表:tb_cms_user,角色表:tb_cms_role,用户,角色关联表:tb_cms_user_role,资源表:tb_cms_menu,角色,资源关联表:tb_cms_role_menu

SELECT DISTINCT m.* from tb_cms_role_menu rm
INNER JOIN tb_cms_role r ON rm.role_id = r.id
INNER JOIN tb_cms_user_role ur ON rm.role_id = ur.role_id
INNER JOIN tb_cms_user u ON u.userid = ur.user_id
INNER JOIN tb_cms_menu m ON rm.menu_id = m.id
and u.username = 'admin' order by m.id

上面的SQL语句查询的结果就是用户名为admin的用户所具有的权限资源列表,如下图:



分享到:
评论

相关推荐

    经典SQL语句大全

    select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where ..... 12、说明:日程安排提前五分钟提醒 SQL: select * from 日程安排 where datediff('minute',f...

    数据库操作语句大全(sql)

    select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where ..... 12、说明:日程安排提前五分钟提醒 SQL: select * from 日程安排 where datediff('minute',f...

    sql经典语句一部分

    select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where ..... 12、说明:日程安排提前五分钟提醒 SQL: select * from 日程安排 where datediff('minute',f...

    2009达内SQL学习笔记

    通配符在搜索模式中任意位置使用,并且可以使用多个通配符。 通配符%表示任何字符出现任意次数;还能代表搜索模式中给定位置的0个或多个字符。下划线匹配单个任意字符。 如:select table_name from user_tables ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

     查询用户拥有哪里权限: SQL> select * from role_tab_privs;//查询授予角色的对象权限 SQL> select * from role_role_privs;//查询授予另一角色的角色 SQL> select * from DBA_tab_privs;//查询直接授予用户的...

Global site tag (gtag.js) - Google Analytics