SQL根据多列值过滤搜索

标签 sql sql-server sql-server-2008 sql-server-2005 t-sql

我正在处理一个表(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 获取 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'

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

编辑:我刚刚看到您的注释,您已经有一个 UserRights 表,因此您已经完成了第 1 步。

关于SQL根据多列值过滤搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8617375/

相关文章:

php - 包含 2 个或更多字段的 sql 搜索

sql - 'JSON' 附近的语法不正确 - SQL Server 2014

sql - 如果地址空间是连续的,对 IDENTITY 列的查找是否会更快?

sql - 使用 Postgres RECURSIVE 创建后代 View

mysql:键 '0' 的重复条目 'PRIMARY' 和奇怪的 ID 行为

sql - 如何连接表变量?

json - 对 JSON 数据使用 MERGE 命令

mysql - 为什么这个查询运行得这么慢?

sql-server-2008 - SQL Server 返回意外的周数

sql - 更改 SQL Server 2008 中的列名称