Вставить новое отношение «B» для всех данных, где отношение «A» не существует? - PullRequest
1 голос
/ 14 сентября 2010

Ok 3 таблицы, пользователи, группы и группы пользователей.

Важными столбцами являются Users.UserID, Groups.GroupID, UserGroups.UserID и UserGroups.GroupID.

У меня естьgroup, мы назовем группу 'A', в этой группе есть группа пользователей, потому что есть много строк UserGroups, где GroupID - это идентификатор группы Group 'A'.

Теперь для всех пользователей, которыеУ меня нет этой ассоциации UserGroup. Я хочу вставить новую ассоциацию UserGroup для группы «B».

Итак, поместите всех пользователей, не входящих в группу «A», в группу «B», если пользователь входит в группу, когдасуществует группа пользователей с этим идентификатором пользователя и идентификатором группы.

Как мне написать запрос, который вставит группу пользователей из идентификатора пользователя и группы из группы «В» для всех пользователей, у которых еще нет группы пользователейс GroupID группы 'A'?

Кроме того, как я могу добавить дополнительные GroupID к исключению?То есть если была группа «C», и я хотел добавить в группу «B» только тех пользователей, которые не входят ни в «A», ни в «C»?

1 Ответ

1 голос
/ 14 сентября 2010

Это работает для вас?

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').

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...