多表查询扩展
只要找到之间的关系,梳理清楚
三个点
查什么?
哪里查?
条件是什么?
下面是样表,和代码执行
# 4张表 用户表user 角色表role 中间表centre 权限表limit
create table user(
id int primary key auto_increment, -- 用户id
user_name varchar(32) not null, -- 用户名字
limitId int not null -- 用户权限
);
#角色表
create table role(
id int primary key, -- 角色id
role_name varchar(32) not null -- 角色名称
);
#中间表
create table centre(
id int primary key auto_increment, -- 中间表id
rid int not null, -- 角色id
lid int not null -- 权限id
);
#权限表
create table limits(
id int primary key auto_increment, -- 权限id
limit_name varchar(32) not null -- 权限名称
);
# 插入数据
# 用户数据
insert into user (user_name,limitId) values('曹操',1),('荀彧',2),('徐晃',3);
# 角色
insert into role(id,role_name)values(1,'丞相'),(2,'军师'),(3,'将军');
# 中间表
insert into centre(rid,lid) values(1,4),(1,3),(1,2),(1,1),(2,3),(2,2),(2,1),(3,2),(3,1);
# 权限表
insert into limits (limit_name) values('上阵杀敌'),('带兵杀敌'),('策划布局'),('掌握全局');
# 查询曹操的权限
select
u.user_name, -- 用户姓名
l.limit_name -- 用户权利名称
from
user u -- 用户表
join
role r -- 角色表
on
u.limitId = r.id -- 连接条件
join
centre c -- 中间表
on
c.rid = r.id -- 建立连接与角色表
join
limits l -- 权限表
on
c.lid = l.id -- 建立连接与权限表
where
u.user_name="曹操"; -- 查找条件约束
/*运行结果如下
+-----------+--------------+
| user_name | limit_name |
+-----------+--------------+
| 曹操 | 掌握全局 |
| 曹操 | 策划布局 |
| 曹操 | 带兵杀敌 |
| 曹操 | 上阵杀敌 |
+-----------+--------------+
*/