2017-05-26 38 views
0

我得到了大约5个用户的列表中有重复的条目。 这是我用来获取重复条目的查询。请建议一些简单的方法来删除少量条目。从表中删除几个重复的行sql

USE [DB] 

SELECT UserName, COUNT(*) AS CountOF 
FROM UserDetails 
WHERE RoleID = '2' 
GROUP BY UserName 
HAVING COUNT(*) > 1 
+1

你确定你正在使用MySQL(而不是SQL Server)的另一个uniq的列?桌子的结构是什么? –

+0

我正在使用sql server。对不起,关于错误的标签 – beginner

回答

3

使用方括号表示SQL Server。如果是这样,你可以这样做:

WITH todelete as (
     SELECT ud.*, 
      ROW_NUMBER() OVER (PARTITION BY RoleId, username ORDER BY RoleId) as seqnum 
     FROM UserDetails 
     WHERE RoleID = 2 
    ) 
DELETE FROM todelete 
    WHERE seqnum > 1; 

注意:如果RoleId是一个数字,那么就不要比较值的字符串。

+0

是角色ID是一个数字。如果有2个重复条目,上面的查询将删除一个权利? – beginner

+0

这个逻辑将为'RoleId = 2'的每个'username'保留一个值。 –

+0

非常感谢。让我试试这个 – beginner

0

需要像ID或createtime 多个数据库的支持

with repeatData as (
    SELECT UserName,COUNT(*) as CountOF,min(id) as keepTag FROM UserDetails 
    WHERE RoleID = '2' 
    GROUP BY UserName 
    HAVING COUNT(*)>1), 
toDelData as (
    select id from UserDetails 
    where UserName in (SELECT UserName from repeatData) 
    and id not in (SELECT keepTag from repeatData)) 
delete FROM UserDetails where id in (select id from toDelData)