为关系“A”不存在的所有数据插入新关系“B”?

时间:2010-09-13 22:35:36

标签: sql-server-2005 insert

确定3个表,用户,组和用户组。

重要的列是Users.UserID,Groups.GroupID,UserGroups.UserID和UserGroups.GroupID。

我有一个组,我们称之为'A'组,这个组中有很多用户,因为有很多行的UserGroup,其中GroupID是组'A'的GroupID。

现在,对于没有此UserGroup关联的所有用户,我想为组'B'插入新的UserGroup关联。

因此,将不在组'A'中的所有用户放入组'B'中,当存在具有该UserID且存在GroupID的UserGroup时,用户就在组中。

如何编写一个查询,为所有尚未拥有GroupID为Group'A组的UserGroup的用户插入UserID的UserGroup和Group'B'的GroupID?

另外,如何在排除中添加其他GroupID?这意味着是否还有一个组'C',我只想将用户添加到既不是'A'又不是'C'的'B'组?

1 个答案:

答案 0 :(得分:1)

这对你有用吗?

INSERT INTO UserGroups (GroupID, UserID)
SELECT g.GroupID, u.UserID
FROM Users u
CROSS JOIN Groups g
WHERE g.Group = 'B'
    AND u.UserID NOT IN
        (SELECT u2.UserID
        FROM Users u2
        JOIN UserGroups ug2 on u2.UserID = ug2.UserID
        JOIN Groups g2 on g2.GroupID = ug2.Group_ID
        WHERE g2.Group in ('A')
        )

排除其他群组时,您可以将WHERE g2.Group in ('A')更改为WHERE g2.Group in ('A', 'C')