/ / Вставити нове відношення 'B' для всіх даних, де відношення 'A' не існує? - sql-server-2005, вставка

Вставити нове відношення "B" для всіх даних, якщо відношення "A" не існує? - sql-server-2005, вставка

Ok 3 таблиці, Користувачі, Групи та Групи користувачів.

Важливими стовпцями є Users.UserID, Groups.GroupID, UserGroups.UserID та UserGroups.GroupID.

У мене є група, яку ми будемо називати групою "А", у цій групі є купа Користувачів, оскільки є багато рядків UserGroups, де GroupID є GroupID групи "A".

Тепер для всіх користувачів, які не мають цієї асоціації UserGroup, я хочу вставити нову асоціацію UserGroup для групи "B".

Отже, помістіть усіх користувачів, які не перебувають у групі "А", у групу "В", користувач перебуває у групі, коли існує UserGroup із цим UserID та цим GroupID.

Як я можу написати запит, який буде вставляти UserGroup UserID та GroupID групи "B" для всіх користувачів, які ще не мають UserGroup з GroupID групи "A"?

Крім того, як я можу додати додаткові ідентифікатори групи до виключення? Значить, якби існувала і група "С", і я хотів лише додати користувачів до групи "В", які не знаходяться ні в "А", ні в "С"?

Відповіді:

1 для відповіді № 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").