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