позволяет сделать некоторые тестовые данные
DECLARE @users TABLE
(
ID INT,
NAME VARCHAR(20)
)
INSERT INTO @users
VALUES
(1, 'one'),
(2, 'two'),
(3, 'three'),
(4, 'four'),
(5, 'five');
DECLARE @groups TABLE
(
ID INT,
NAME VARCHAR(20)
)
INSERT INTO @groups
VALUES
(1, 'CompanyA'),
(2, 'CompanyB'),
(3, 'CompanyC'),
(4, 'CompanyD'),
(5, 'AdminA'),
(6, 'AdminB'),
(7, 'AdminC'),
(8, 'AdminD'),
(9, 'AdminAll');
DECLARE @link TABLE
(
USERID int,
GROUPID int
)
INSERT INTO @link
VALUES
(1, 1),
(2, 1),
(3, 1),
(3, 2),
(3, 5),
(4, 2),
(5, 1),
(5, 2),
(5, 9);
Теперь мы просто проверяем, чтобы видеть, кто имеет доступ к компании, но не имеет доступа компании администратора (или администратора по всей компании доступ)
SELECT *
FROM @users u
INNER JOIN @link l
ON l.USERID = u.ID
INNER JOIN @groups g
ON g.ID = l.GROUPID
WHERE u.ID NOT IN
(
SELECT l.USERID
FROM @link l
INNER JOIN @groups g
ON g.ID = l.GROUPID
WHERE g.NAME = 'AdminB' OR g.NAME = 'AdminAll'
)
AND g.NAME = 'CompanyB'
Выход :
ID NAME USERID GROUPID ID NAME
3 three 3 2 2 CompanyB
4 four 4 2 2 CompanyB
oh ... not admin. поэтому '<> '02'' или' <>' Admin'', а затем где 'user.id <> '03'' или' links.user <>' 03 '... just ... select * from link где группа <> '02' и пользователь <> '03' и присоединяются к пользовательским и групповым таблицам, если вы хотите получить дополнительные данные (имена n таких). –
Третий член не админ ... кстати. и есть четыре пользователя. –
Почему у ваших идентификаторов есть ведущие нули? скажите, что они не строки! –