【发布时间】:2014-10-29 10:38:12
【问题描述】:
我正在处理 SQL 查询以返回有权访问同一商店的用户列表。商店设置为需要一个区域和一个州。如果 Store、State 和 Region 为 NULL,并且“Access”不为 Null,则用户拥有对所有商店的完全访问权限。示例...
LocationID | UserID | StoreID | State | RegionID | Access |
1 1 NULL NULL NULL 1
现在,如果用户具有完全访问权限,除了存储 123 之外,那么他们的表条目将具有此权限....
LocationID | UserID | StoreID | State | RegionID | Access |
1 1 NULL NULL NULL 1
2 1 123 NULL NULL NULL
所以这告诉软件他们有完全访问权限,但在存储 123,他们有 NULL(否)访问权限。
我要做的是选择所有有权访问特定商店的用户。我现在拥有它,因此它可以将所有 userId 拉到哪里...
StoreID IN (SELECT StoreID FROM @tblStores)
OR RegionID IN (SELECT RegionID FROM @tblStores)
OR StateID IN (SELECT State FROM @tblStores)
这适用于拉取 StoreID、State 或 RegionID 匹配的所有用户(还检查 Access IS NOT NULL)
我的问题是针对那些拥有完全访问权限的人,除了某个地方。我如何能够选择 StoreId/State/RegionID 为 null 的用户,除非他们有另一个与 store/state/regionid 匹配且访问权限为 null 的条目?
所以现在,如果我运行查询试图在商店 123 中查找所有用户,它会返回 UserID 1,因为 UserID 1 有一行所有内容都为 NULL 并且 Access 不为 null。我需要检查 UserID1 是否对 storeid 123、State(随便)或 RegionID(随便)有 NULL 访问权限....
关于快速完成此操作的任何想法?有没有一种方法可以说只在所有条件都匹配的地方提取用户 ID,是吗?
【问题讨论】:
标签: mysql sql sql-server