2014-09-04 7 views
0

Я работаю над SQL-запросом, чтобы вернуть список пользователей, имеющих доступ к одному и тому же хранилищу. Магазины настроены так, чтобы требовать регион и государство. Если Store, State и Region имеют значение NULL, а «Access» NOT 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 (Нет).

Что я пытаюсь сделать, это выбрать всех пользователей, имеющих доступ к определенному магазину. У меня есть это прямо сейчас, так что она тянет все иденты где ...

StoreID IN (SELECT StoreID FROM @tblStores) 
OR RegionID IN (SELECT RegionID FROM @tblStores) 
OR StateID IN (SELECT State FROM @tblStores) 

И это прекрасно работает для протяжки всех пользователей, где StoreID, государство или RegionID матч (есть также проверка доступа IS NOT NULL)

Моя проблема возникает для людей, которые имеют полный доступ ЗА ИСКЛЮЧЕНИЕМ где-то. Как я могу выбрать пользователя, где StoreId/State/RegionID имеют значение NULL, если у них нет другой записи, где она совпадает с хранилищем/state/regionid, а доступ - null?

Так что прямо сейчас, если я выполнил свой запрос, пытаясь найти всех пользователей в магазине 123, он возвращает UserID 1, потому что UserID 1 имеет строку, где все имеет значение NULL, а Access не равно null. Мне нужно проверить, имеет ли UserID1 NULL доступ к хранилищу 123, State (независимо) или RegionID (независимо) ....

Любые идеи по быстрому способу сделать это? Есть ли способ, который вы можете сказать, чтобы вытащить UserID, где ВСЕ критерии совпадают, есть ли?

ответ

1

Вам нужно добавить что-то вроде этого:

И НЕ USERID в (выбрать где StoreID = ... и доступ нуль)