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
)
)
)
请前辈教我优化一下这个查询,我只会这些简单的子查询,谢谢,分不多,想多问些问题,呵呵!
------解决思路----------------------
不用in,可以用exist。另外,这三张表的引用关系是什么?
user --用户表
User_Roles --用户角色表
Role_Permission --用户权限
------解决思路----------------------
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)
------解决思路----------------------
甚至exists 都可以不用,直接将这四个表连接其他,最后用userpkno=10这个条件筛选
------解决思路----------------------
效率高低与连接表的数量不明显,如果多表连接效率低,需要看看执行计划,然后需要看看怎么办。
根据经验,这四个表的数据应该不多,连接查询不会慢