mysql - 返回所有行匹配条件的值

标签 mysql sql sql-server

我正在编写一个 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/

相关文章:

mysql - 有没有一种简单的方法可以将 MySQL 表结构并最终将数据导入 Firebase?

php - 为什么我的 MySQL 数据没有显示在我的 PHP 代码中?

php - mysqli_query INSERT无法正常工作

sql-server - 删除使用 SSMS 生成的 SQL 脚本中的日期/时间?

sql - 按 7 天分组日期,不包括特定日期

sql - 如何编辑表以启用级联删除?

php - 使用 PDO 和 MySQL 更新查询

sql - 在 sql server 2008 中使用带有列和行总数的数据透视表

javascript - Node JS Sequelize Table 1 与 Table2 没有关联

php - 将 SQL 查询的 SELECT 子句解析为 PHP 数组