根据条件删除记录

Deleting Records Based on Criteria

我有一个从 table(用户)那里得到的用户列表(字段 = 用户名)。有些是重复的。

如果有重复的记录,我需要删除最近创建的记录(CreatedOn)。

此外,如果因为数据库中有 'relationships established to this user ID' 而无法删除,我需要它跳到下一条记录并继续删除。

我该如何实现??

您可以尝试这样的操作:

Delete from Users
 where nameuser in 
(select nameuser from Users
Group by nameuser
Having count(nameuser) > 1)

如果相同的 UserName 也有一个较早的 CreatedOn:

,则使用 EXISTS 删除一行
delete from users u1
where exists (select 1 from users u2
              where u2.UserName = u1.UserName
                and u2.CreatedOn < u1.CreatedOn)

或者,另一种方法:

delete from users
where (UserName, CreatedOn) not in (select UserName, MIN(CreatedOn)
                                    from users
                                    group by UserName)

从 Diego 的回答中添加并检查用户名是否不是 table 中最早的实例。

DELETE FROM 
    Users
WHERE 
    UserName IN 
    (SELECT UserName FROM Users GROUP BY UserName HAVING COUNT(UserName) > 1)
    AND
    CreatedOn != 
    (SELECT MIN(CreatedOn) FROM Users T1 WHERE UserName = T1.UserName);
DELETE  from  user u
WHERE   u.UserId in ( SELECT Distinct userid from User u join User u2 where u.UserName = u2.UserName
and u.CreatedOn > u2.CreatedOn)

您不能跳过一个 sql 中的错误,但您可以排除相关表中存在的用户 ID。