我正在编写一个 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,是吗?
最佳答案
您需要添加如下内容:
AND NOT userid in(从 storeid=... 且访问权限为 null 的位置选择)
关于mysql - 返回所有行匹配条件的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25669546/