2017-05-26 70 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)