2016-01-22 17 views
0

刪除重複項與SQL上市記錄我使用這個命令來查找在我的數據庫已經在city列的值相同的記錄:在phpMyAdmin

SELECT city, COUNT(*) c FROM allCity GROUP BY city HAVING c > 1; 

當我運行這個在phpMyAdmin我得到一個有兩列的巨大列表,第一列是city,第二列是c。我假設c列中的數字顯示重複條目的數量,但我無法真正列出重複項目,但可能不需要。

所以我的目標是在運行上述命令後從列表中刪除所有重複項。不幸的是,這是我第一次使用sql命令,因此如果有人能告訴我應該如何擴展我現有的代碼或者我應該實現哪些功能才能實現呢?基本上我只想刪除city列中除第一條記錄外具有相同值的每條記錄。例如,如果我有3個記錄,其中city列中的值爲New York,我想刪除兩個並保留一個。哪兩個將被刪除並不重要。

+0

可能重複的[在MySQL中刪除重複行](http://stackoverflow.com/questions/3311903/remove-duplicate-rows-in-mysql) –

+0

有幾種解決方案。但重要的信息,你的表有一些ID /主鍵? –

+0

@JuanCarlosOropeza是的,我有一個名爲'objId'的列,所以每個記錄都有一個唯一的標識符。 – sabiv

回答

1

這刪除一個城市,如果存在其他城市同名但ID較小。所以最後只有小ID會保留在分貝。

DELETE FROM allCity AS c 
WHERE exists (select tid 
       from allCity c2 
       where c2.name = c.name 
       and c2.id < c.id); 
1

這一切都取決於數據是如何存儲和數據庫等有多大

我通常使用的查詢有點像這樣:

DELETE dup FROM allCity AS original 
LEFT JOIN allCity AS dup 
ON dup.city = original.city AND 
dup.objId != original.objId; 

此報表選擇所有城市,加入相同的表格,但只有在主要ID不相同的情況下。在這種情況下,甚至不需要WHERE子句,因爲我們說我們只刪除重複項(所以ID與原始記錄不一樣)。