[ Mysql多对多SQL写法 ]


多对多(权限abrc)

表结构

1. 用户表 user

2. 用户&角色-中间表 user_role

3. 角色表 role

4. 角色&权限-中间表 role_power

5. 权限表 power

数据库查询**

使用内join查询(5连表)

  • user左连
  • user_role连
  • role连
  • role_power连
  • power
select `user`.id as user_id, `user`.username as 用户名, `role`.name as 角色, `power`.name as 权限
from `user`  
    left join (`user_role`
        inner join (`role` 
            inner join (`role_power`
                inner join `power` on `role_power`.power_id = `power`.id) 
                    on `role`.id = `role_power`.role_id) on `role`.id = `role_power`.role_id
    ) on `user`.id = `user_role`.role_id 
where `user`.id = 1

正常连接(5连)!!!!!!推荐!!!!!!!!!!!!!

  • 查看计划显示: 正常连接索引用的多
EXPLAIN select `user`.id as user_id, `user`.username as 用户名, `role`.name as 角色, `power`.name as 权限
from `user`
join `user_role`
on `user`.id = `user_role`.user_id 
join `role`
on `user_role`.role_id = `role`.id
join `role_power`
on `role`.id = `role_power`.role_id 
join `power`
on `power`.id = `role_power`.power_id
where `user`.id = 1