我正在使用SQL Server2005。我有三个表-用户,组和组用户。 GroupUsers包含用于多对多关系的两个PK。
我的观点是要获取组的所有用户信息,如下所示:
SELECT * FROM GroupUsers JOIN Users ON GroupUsers.UserID = Users.UserId
我想创建此 View 的反面-我想要一个未附加到特定组的所有用户的列表。以下查询将完成此操作:
SELECT * FROM Users WHERE UserID NOT IN
(SELECT UserID FROM GroupUsers WHERE GroupID=@GroupID)
但是,我不想指定组,我想知道如何将其变成一个 View ,该 View 将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的准备,目前无法尝试。