sql – 获取连接的倒数?

我使用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 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在这一点上无法尝试.

相关文章
相关标签/搜索