我正在处理一个表(3+百万行,SQL Server) 我需要根据下面两列过滤结果:
<code>
...FromID| ToID |Column5|....
...1001 2001
...1002 2020
...1003 5000
...1001 3000
...2001 1001
</code>
现在,User1 可以访问 FromID 或 ToId 1001 的记录。
FromID|ToID
1001|2001
1001|3000
2001|1001<br/>
用户2可以访问FromID或ToID为1002,1003,3000的记录
FromID|ToID
1002|2020
1003|5000
1001|3000
最有效的方法是什么? 我需要为每个用户创建一个 View 吗?(这适用于企业,用户数将是 最多 100 ) 谢谢。
PS。我的第一个问题。 O.o最佳答案
您的访问标准似乎相当随意。用户 1 获取 1001
,用户 2 获取 1002
、1003
和 3000
,我假设用户 3 到 99 具有任意访问也是如此。在这种情况下,我建议您创建一个表,在此示例中将其命名为 useraccess
:
user |accessID
---------------
user1|1001
user2|1002
user2|1003
user2|3000
... |...
现在,当您想知道用户拥有哪些行时,您可以这样做:
SELECT t.FromID, t.ToID, [[other columns you care about]]
FROM yourtable t
JOIN useraccess a ON t.FromID = a.accessID OR t.ToID = a.accessID
WHERE a.user = 'user2'
您可以动态运行该查询,也可以基于它创建 View 。 View 和直接查询之间的通常权衡将照常适用。
编辑:我刚刚看到您的注释,您已经有一个 UserRights
表,因此您已经完成了第 1 步。
关于SQL根据多列值过滤搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8617375/