2015-05-07 98 views
0

在我的數據庫中有一個包含冗餘數據的表。這意味着它在多行中有多次相同的數據。使用mysql查詢刪除表中的重複條目

我想刪除所有冗餘數據並只保留一條記錄。問題是我的桌子現在沒有主鍵或唯一鍵。但我有數據。

你能給我一個MySQL查詢的例子,刪除所有重複的行嗎?

DELETE 
FROM enr_money_handover_detail 
WHERE lastupdate IN (
         SELECT lastupdate 
         FROM enr_money_handover_detail 
         GROUP BY lastupdate); 

這說明像

您不能指定目標表 'enr_money_handover_detail' 的更新在FROM子句」錯誤。

+1

顯示你的表結構,樣本數據和預期的結果 – HaveNoDisplayName

+0

DELETE FROM enr_money_handover_detail WHERE LASTUPDATE IN(SELECT LASTUPDATE FROM enr_money_handover_detail GROUP BY lastupdate);這會顯示錯誤,如「您無法指定目標表'enr_money_handover_detail'以在FROM子句中進行更新」。 –

+0

: - 不要將代碼置於評論中,請編輯您的問題。這次我將編輯您的問題以添加代碼。 – HaveNoDisplayName

回答

2

SELECT DISTINCT是你的朋友。創建一個新的表和插入從查詢使用選擇不同於您的舊錶

2

我認爲你需要從當前表中的所有不同的記錄副本e到其他表格(備份)。

然後截斷您的原始表,然後將記錄從您的備份表複製回原始表。

下面的命令將幫助您實現它。

CREATE TABLE handover_backup SELECT DISTINCT * FROM enr_money_handover_detail; 

TRUNCATE TABLE enr_money_handover_detail; 

INSERT INTO enr_money_handover_detail SELECT * FROM handover_backup; 

希望這會幫助你。

+0

我認爲備份表應該具有所有數據而不是DISTINCT數據,當您將數據從備份表傳輸到原始表時,請使用Distinct ...其他方面也會改變丟失的數據。 – HaveNoDisplayName

+0

我們可以做任何一種方式,最終目標是刪除重複的條目,兩者都將解決目的。 –

-1

至於別人說,你可以使用SELECT DISTINCT,並使用一個簡單的刪除查詢是這樣的:

DELETE FROM enr_money_handover_detail WHERE lastupdate IN (SELECT DISTINCT(lastupdate) FROM enr_money_handover_detail);