当前位置: 代码迷 >> Sql Server >> sql表多对多的查询解决方案
  详细解决方案

sql表多对多的查询解决方案

热度:36   发布时间:2016-04-27 19:11:53.0
sql表多对多的查询
现在有一张用户表 user
id,name
 1 lu
 2 ren
 3 si


角色表 role

id,roleName
1 ,普通
2,管理员


中间表

userid ,roleid
1 , 1

1 , 2

2 , 1

2 , 2
3 , 1



现在要查询同时 是普通和管理员角色的用户 ,注: 中间表现在有1000W条记录

查询语句应该如何写




------解决方案--------------------
SQL code
select user.id,user.name from user where user.id in(   select userid,count(roleid) from 中间表where count(roleid)>1 group by userid);--等大牛
------解决方案--------------------
role--有多个角色时把加条件加上b.roleName in('普通','管理员')
SQL code
select * from  [user] as a where not exists(select 1 from [role]  as b where b.roleName in('普通','管理员') and  not exists(select 1 from 中间表 where userID=a.userID and roleID=b.roleID))
------解决方案--------------------
SQL code
select distinct a.name from [user] a inner join 中间表 b on a.id=b.useridinner join [role] c on c.id=b.roleidinner join [role] d on d.id=b.roleidwhere c.roleName='普通' and d.roleName='管理员'
  相关解决方案