我正在使用SQL Server2005。我有三个表-用户,组和组用户。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运算符可以执行此操作吗?
更新:
我认为这是我的解决方案,除非有人提出更好的建议:
SELECT G.GroupId, U.* FROM Groups G CROSS JOIN Users U WHERE U.UserId NOT IN ( SELECT UserId FROM GroupUsers WHERE GroupId=G.GroupId )
如果我正确理解,则必须对用户和组进行笛卡尔运算,并减少从GroupUsers得出的结果。
这将为您提供未附加任何组的用户记录。 如果无法正确理解问题,我深表歉意。
编辑:笛卡尔结果将为您提供用户*组。您将不得不从中减去GroupUsers。抱歉,我还没有SQL的准备,目前无法尝试。