用一条sql查询出菜单数以及菜单对应的角色关系

前几天公司要求将系统菜单树以及菜单对应的角色关系列出来做调整,所以写了如下SQL供参考


select TT.T1 一级菜单, TT.T2 二级菜单, TT.T3 三级菜单, TT.T4 四级菜单, group_concat(rel.role_code) 菜单角色
from (select m1.menu_name T1, m2.menu_name T2, m3.menu_name T3, m4.menu_name T4,
  (CASE 
       WHEN m4.parent_code IS NULL 
       THEN CASE
		WHEN m3.parent_code IS NULL 
		THEN m2.parent_code -- 从最后一级菜单往上匹配没有parent_code的菜单(这里到二级菜单结束)
		ELSE m3.parent_code 
	    END 
       ELSE m4.parent_code 
   END) code
    from menu_test m1 
    left join menu_test m2 on m1.menu_code = m2.parent_code
    left join menu_test m3 on m2.menu_code = m3.parent_code
    left join menu_test m4 on m3.menu_code = m4.parent_code  -- 这里有几级菜单就关联几个
    where m1.level = '1' ) TT ,  -- 从一级菜单开始往下查询
role_meun_rel rel 
where TT.code = rel.menu_code
group by TT.T1, TT.T2, TT.T3, TT.T4

 查询效果如下:

一级菜单二级菜单三级菜单四级菜单菜单角色
一级菜单二级菜单(1)  XX10,XX20,XX30,XX99
一级菜单二级菜单(2)三级菜单(2)(1) XX20,XX99
一级菜单二级菜单(3)三级菜单(3)(1)四级菜单(3)(1)(1)XX30,XX99

以上查询涉及到菜单表、角色与菜单关系表   表结构如下(随便建的表仅供参考):

CREATE TABLE menu_test (
  `menu_code` varchar(10) CHARACTER  NOT NULL COMMENT '菜单编码',
  `level` varchar(2) CHARACTER  DEFAULT NULL COMMENT '菜单级别',
  `parent_code` varchar(10) CHARACTER  DEFAULT NULL COMMENT '父菜单编码',
  `menu_name` varchar(20) CHARACTER  DEFAULT NULL COMMENT '菜单名称',
  PRIMARY KEY (`menu_code`)
) COMMENT='菜单表';


CREATE TABLE `role_meun_rel` (
  `role_code` varchar(20) CHARACTER DEFAULT NULL COMMENT '角色编码',
  `menu_code` varchar(20) DEFAULT NULL COMMENT '菜单编码',
  UNIQUE KEY `role_menu_index` (`role_code`,`menu_code`)
) COMMENT='角色与菜单关系表';

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值