У меня есть некоторое загрязнение данных в таблице, которое мне трудно удалить ... Я устранил причину загрязнения, поэтому этого больше не будет, но есть несколько записей, которые мне теперь нужно удалить, и Мне сложно понять, как это сделать.

Суть проблемы заключается в следующем.

У меня есть таблица с идентификаторами пользователей и групп. Пользователь может существовать в нескольких группах, поэтому я не могу решить эту проблему с помощью уникальной ассоциации.

В моем случае, скажем, группы 4 и 5 являются взаимоисключающими (что означает, что пользователь не может принадлежать обеим).

Мне нужно выполнить удаление в таблице user_groups, где я могу сказать (по-английски): Удалите эту строку, если userID = X и идентификатор группы = 4, ЕСЛИ есть также строка, где userID = X и groupID = 5.

Я не хочу удалять ВСЕ строки, где groupID = 4, только те, которые относятся к пользователям, у которых также есть строка, содержащая groupID = 5.

Любая помощь очень ценится.

0
Yevgeny Simkin 10 Июл 2012 в 02:33

1 ответ

Лучший ответ

Это приведет к удалению всех пользователей в группе 4, у которых есть дубликаты в группе 5.

DELETE FROM user_groups AS G1 
WHERE G1.groupID=4 
  AND G1.userID IN (SELECT G2.userID FROM user_groups 
                    WHERE G2.userID=G1.userID AND G2.GroupID=5)
1
Holger Brandt 10 Июл 2012 в 03:24