返回所有行匹配条件的值

时间:2014-09-04 15:36:22

标签: mysql sql sql-server

我正在处理SQL查询,以返回有权访问同一商店的用户列表。商店设置为需要Region和State。如果Store,State和Region为NULL,并且' Access'不是空的,那么用户可以完全访问所有商店。实施例...

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(No)访问权。

我尝试做的是选择有权访问特定商店的所有用户。我现在就拥有它,以便它将所有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访问权限....

有关快速方法的任何想法吗?有没有办法可以说只提取所有标准匹配的UserID,是吗?

1 个答案:

答案 0 :(得分:1)

您需要添加以下内容:

AND NOT userid in(从storeid = ...中选择,并且access为null)