2013-02-21 45 views
2

如果你能幫我解決這個sql問題,我將不勝感激。如何從MySQL表中刪除重複記錄?

我有一個包含兩列的表。在這個例子中,將它們命名爲UserID和LocationID。

我想清理此表,因此我想保留每個唯一的UserID和LocationID對的第一次出現,並刪除包含相同對的其他行。換句話說,我想知道他去過的每個用戶的每個位置。如果他一次又一次地訪問同一個地方並記錄下來,我想刪除這些記錄。例如,這是原始表格:

ID UserID LocationID 
1. "user1" "location1" 
2. "user1" "location2" 
3. "user2" "location3" 
4. "user1" "location1" 
5. "user2" "location3" 
6. "user2" "location3" 

我想刪除4.行,5.行和6.行。

是否可以在一個mysql命令中解決它? 謝謝。

+0

選擇不同* – scott 2013-02-21 19:58:36

+0

你怎麼知道什麼是「第一次出現」只是因爲它首先在你的輸出中並不一定意味着它是第一次進入數據庫...第二名數字來自哪裏?他們是否也有某種列名,或者僅出於說明目的? – xQbert 2013-02-21 20:00:55

+0

你的表是否有'AUTO_INCREMENT'字段,比如'rowID'或者其他? – 2013-02-21 20:01:30

回答

3

刪除使用自聯接:

DELETE t2.* 
FROM tablename AS t1 
INNER JOIN tablename AS t2 
    ON t1.UserID = t2.UserID 
    AND t1.LocationID = t2.LocationID 
WHERE t1.ID < t2.ID 

tablename應該與你的表的名稱進行替換。

1

要添加到奧斯瓦德的答案,以防止重複將來你可以使用INSERT ... ON DUPLICATE UPDATE:

INSERT INTO table (a,b,c) VALUES (1,2,3) 
ON DUPLICATE KEY UPDATE c=c+1; 

UPDATE table SET c=c+1 WHERE a=1;