SQL筛选器根据多个列值进行搜索

时间:2011-12-23 14:52:34

标签: sql sql-server sql-server-2008 sql-server-2005 tsql

我正在处理一个表(300多万行,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

User2可以使用FromID或ToID 1002,1003,3000访问记录      FromID|ToID 1002|2020 1003|5000 1001|3000

最有效的方法是什么? 我是否需要为每个用户创建一个视图?(这适用于企业,用户数量将是 最多100) 感谢。

PS。我的第一个问题。 O.o

1 个答案:

答案 0 :(得分:3)

您的访问标准似乎相当随意。 User1获得1001,user2获得100210033000,我认为用户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'

您可以动态运行该查询,也可以基于它创建视图。视图和直接查询之间的通常权衡将照常应用。

修改:我刚看到您已经有UserRights表的说明,因此您已完成第1步。

相关问题