MySQL 多对多表的一个扩展

多表查询扩展

只要找到之间的关系,梳理清楚

 

三个点

查什么?

哪里查?

条件是什么?

 

下面是样表,和代码执行 

 
 # 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   |
+-----------+--------------+
| 曹操      | 掌握全局     |
| 曹操      | 策划布局     |
| 曹操      | 带兵杀敌     |
| 曹操      | 上阵杀敌     |
+-----------+--------------+
 	*/

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值