Я использую SQL Server 2005. У меня есть три таблицы - пользователи, группы и группы пользователей. GroupUsers содержит два PK для отношения "многие ко многим".
У меня есть возможность получить всю информацию о пользователе для группы следующим образом:
SELECT * FROM GroupUsers JOIN Users ON GroupUsers.UserID = Users.UserId
Я хочу создать обратное этому представлению - мне нужен список всех пользователей, не привязанных к определенной группе. Следующий запрос выполнит следующее:
SELECT * FROM Users WHERE UserID NOT IN
(SELECT UserID FROM GroupUsers WHERE [email protected])
Однако я не хочу указывать группу, я хочу знать, как превратить это в представление, которое объединяет идентификатор GroupID, а затем UserID и всю информацию о пользователе, но только для не подключенных пользователей.
Я не уверен, как это сделать, может быть, что-то с оператором EXCEPT?
UPDATE:
Я думаю, что это мое решение, если кто-то не придумает что-то лучшее:
SELECT
G.GroupId,
U.*
FROM
Groups G
CROSS JOIN
Users U
WHERE
U.UserId NOT IN
(
SELECT
UserId
FROM
GroupUsers
WHERE
GroupId=G.GroupId
)