sql 子查询优化 权限管理的

低丶调 2014-11-19 09:43:51

select MenuText
from mainmenu
where PermissionID in
(
select distinct PermissionID from Role_Permission where RoleID in
(
select RoleID from User_Roles where userid =
(
select id from users where userpkno=10
)
)
)


请前辈教我优化一下这个查询,我只会这些简单的子查询,谢谢,分不多,想多问些问题,呵呵!
...全文
125 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
freecodex 2014-11-19
  • 打赏
  • 举报
回复
引用 5 楼 li1983243109 的回复:
[quote=引用 4 楼 u010024618 的回复:] 甚至exists 都可以不用,直接将这四个表连接其他,最后用userpkno=10这个条件筛选
连接这么多表,效率也不高吧,我不懂啊[/quote] 效率高低与连接表的数量不明显,如果多表连接效率低,需要看看执行计划,然后需要看看怎么办。 根据经验,这四个表的数据应该不多,连接查询不会慢
低丶调 2014-11-19
  • 打赏
  • 举报
回复
引用 4 楼 u010024618 的回复:
甚至exists 都可以不用,直接将这四个表连接其他,最后用userpkno=10这个条件筛选
连接这么多表,效率也不高吧,我不懂啊
freecodex 2014-11-19
  • 打赏
  • 举报
回复
甚至exists 都可以不用,直接将这四个表连接其他,最后用userpkno=10这个条件筛选
低丶调 2014-11-19
  • 打赏
  • 举报
回复
mainmenu(PermissionID)--Role_Permission(PermissionID) Role_Permission (RoleID )--User_Roles (roleid ) User_Roles (userid)--users (id )
xxfvba 2014-11-19
  • 打赏
  • 举报
回复
select MenuText from mainmenu a where exists (select * from Role_Permission b,User_Roles c,users d where a.PermissionID=b.PermissionID and b.RoleID=c.RoleID and c.userid=d.userid and d.userpkno=10)
freecodex 2014-11-19
  • 打赏
  • 举报
回复
不用in,可以用exist。另外,这三张表的引用关系是什么? user --用户表 User_Roles --用户角色表 Role_Permission --用户权限

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧