2013-01-10 31 views
0

我想知道是否有簡單的方法從表sql刪除重複項。簡單地刪除sql表中的重複內容

而不是獲取整個表並刪除數據,如果他們出現兩次。

預先感謝您

這是我的結構:

CREATE TABLE IF NOT EXISTS `mups` (
    `idgroupe` varchar(15) NOT NULL, 
    `fan` bigint(20) DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
+7

什麼RDBMS使用的是?並請添加表格結構和一些樣品數據。 –

+2

您還需要定義什麼是重複的。整行是否重複?它是否在特定列或一組列中重複? – mellamokb

+0

這裏有很多類似的問題[只是其中之一](http://stackoverflow.com/questions/529098/removing-duplicate-rows-from-table-in-oracle) – bonsvr

回答

0

添加計算列取整行的校驗。搜索任何重複的校驗和,排名並刪除重複項。

+0

校驗和可能會產生誤報。如果校驗和是32位寬,那麼你只需要〜80000個不同的行,因爲兩個校驗和相同的可能性大於50%。 –

1

如果您正在使用SQL Server

檢查:SQL SERVER – 2005 – 2008 – Delete Duplicate Rows

使用CTE示例代碼:

/* Delete Duplicate records */ 
WITH CTE (COl1,Col2, DuplicateCount) 
AS 
(
SELECT COl1,Col2, 
ROW_NUMBER() OVER(PARTITION BY COl1,Col2 ORDER BY Col1) AS DuplicateCount 
FROM DuplicateRcordTable 
) 
DELETE 
FROM CTE 
WHERE DuplicateCount > 1 
GO 
+0

這不起作用! WITH MUPS(idgroupe,風扇,DuplicateCount) AS ( SELECT idgroupe,風扇, ROW_NUMBER()OVER(PARTITION BY idgroupe,風扇ORDER BY idgroupe)AS DuplicateCount FROM MUPS ) DELETE FROM MUPS WHERE DuplicateCount> 1 – Anthony

0

你可以做這樣的事情:

DELETE from yourTable WHERE tableID in 
(SELECT clone.tableID 
from yourTable origine, 
    yourTable clone 
where clone.tableID= origine.tableID) 

但在WHERE,你可以比較索引或比較其他領域...

取決於你如何找到你的雙打。

注意到,這種解決方案讓你選擇的是一個雙重的優勢(例如如果PK的變化)

0

可以通過加入表本身,通過做一組找到的重複您正在查找重複項的字段以及計數大於1的條款。

假設您的表名稱是客戶,並且您尋找重複的名稱字段。

select cust_out.name, count(cust_count.name) 
from customers cust_out 
    inner join customers cust_count on cust_out.name = cust_count.name 
group by cust_out.name 
having count(cust_count.name) > 1 

如果你使用這個在delete語句,你會刪除所有重複的記錄,當你可能打算繼續記錄。

所以選擇記錄刪除,

select cust_dup.id 
from customers cust 
    inner join customers cust_dup on cust.name = cust_dup.name and cust_dup.id > cust.id 
group by cust_dup.id