OriginalGriff
Проблема заключается в том, что дублированные строки включаются в другую таблицу с помощью внешнего ключа:
Пользователи
ID Name
1 Joe
2 Mark
3 Joe
Покупки
ID UserID Purchase
1 1 10.00
2 1 14.00
3 2 27.43
4 3 17.00
Таким образом, столбец UserID является внешним ключом к столбцу ID в таблице Users.
В результате, если вы попытаетесь удалить второго " Джо "из пользователей (ID = 3), SQL будет жаловаться, потому что это оставит" осиротевшие " строки в таблице покупок - а это означает, что ваша база данных больше не согласована.
Вы не можете этого сделать: если у вас есть дубликаты в таблице Users, вы должны переместить все зависимые записи в таблице Purchases, чтобы все они относились к экземпляру пользователя, которого вы храните, прежде чем удалять запасные записи в таблице Users.
Это не сложно - в приведенном выше примере это просто:
UPDATE Purchases SET UserID=1 WHERE UserID=2
Затем вы можете выполнить удаление без проблем.
Вы можете настроить SQL на каскадное удаление, где он удаляет все зависимые записи для вас, но это опасно - особенно когда вы удаляете дубликат, поскольку не знаете, какие данные собираетесь удалить и важны ли они.