我想知道是否有簡單的方法從表sql刪除重複項。簡單地刪除sql表中的重複內容
而不是獲取整個表並刪除數據,如果他們出現兩次。
預先感謝您
這是我的結構:
CREATE TABLE IF NOT EXISTS `mups` (
`idgroupe` varchar(15) NOT NULL,
`fan` bigint(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我想知道是否有簡單的方法從表sql刪除重複項。簡單地刪除sql表中的重複內容
而不是獲取整個表並刪除數據,如果他們出現兩次。
預先感謝您
這是我的結構:
CREATE TABLE IF NOT EXISTS `mups` (
`idgroupe` varchar(15) NOT NULL,
`fan` bigint(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
添加計算列取整行的校驗。搜索任何重複的校驗和,排名並刪除重複項。
校驗和可能會產生誤報。如果校驗和是32位寬,那麼你只需要〜80000個不同的行,因爲兩個校驗和相同的可能性大於50%。 –
如果您正在使用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
這不起作用! 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
你可以做這樣的事情:
DELETE from yourTable WHERE tableID in
(SELECT clone.tableID
from yourTable origine,
yourTable clone
where clone.tableID= origine.tableID)
但在WHERE,你可以比較索引或比較其他領域...
取決於你如何找到你的雙打。
注意到,這種解決方案讓你選擇的是一個雙重的優勢(例如如果PK的變化)
可以通過加入表本身,通過做一組找到的重複您正在查找重複項的字段以及計數大於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
什麼RDBMS使用的是?並請添加表格結構和一些樣品數據。 –
您還需要定義什麼是重複的。整行是否重複?它是否在特定列或一組列中重複? – mellamokb
這裏有很多類似的問題[只是其中之一](http://stackoverflow.com/questions/529098/removing-duplicate-rows-from-table-in-oracle) – bonsvr