Я использую SQL Server 2005. У меня есть три таблицы - Пользователи, Группы и GroupUsers. GroupUsers содержит два PK для отношения «многие ко многим».
Я могу получить всю информацию о пользователях для группы следующим образом:
SELECT * FROM GroupUsers JOIN Users ON GroupUsers.UserID = Users.UserId
Я хочу создать инверсию этого представления - я хочу получить список всех пользователей, НЕ прикрепленных к определенной группе. Следующий запрос выполнит это:
SELECT * FROM Users WHERE UserID NOT IN
(SELECT UserID FROM GroupUsers WHERE GroupID=@GroupID)
Однако я не хочу указывать группу, я хочу знать, как превратить это в представление, которое объединяет GroupID, а затем UsersID и всю информацию о пользователе, но только для неприкрепленных пользователей.
Я не уверен, как это сделать, может быть, что-то с оператором 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
)