表1:记录公司部门架构 (树形);
表2:记录用户可以访问数据的公司编码;
表3:记录公司内的人员信息;
模拟数据:
表1
公司名称 公司编码
母公司 1
子公司1 1-1
1孙子公司1 1-1-1
1孙子公司2 1-1-2
1孙子公司3 1-1-3
子公司2 1-2
2孙子公司 1-2-1
表2
用户名 公司编码
test 1-1-1
test 1-1-3
表3
公司编码 人员名称
1-1-1 张三
1-1-3 李四
1- 王五
我现在的解决方式
函数1(用户,公司):判断用户是否有权限查看传入的公司的人员信息,有权限返回1
在分页返回数据时,我会用函数1对每条记录进行权限验证(where dbo.函数1(‘test’,公司编码)=1),这样查询不经过索引,速度很慢。
大家有没有其他比较好的解决方式?
------解决思路----------------------
用INNER JOIN 关联表二表三查询出来就可以了。不要在WHERE后面使用函数。
------解决思路----------------------
select a.*
from 表3 a
join (select distinct 公司編號 from 表2 where 用戶名='test' ) b
on a.公司編號=b.公司編號