Navicat使用教程:如何刪除MySQL中具有不同ID的重復(fù)行
Navicat Premium是一個可連接多種數(shù)據(jù)庫的管理工具,它可以讓你以單一程序同時連接到MySQL、Oracle及PostgreSQL數(shù)據(jù)庫,讓管理不同類型的數(shù)據(jù)庫更加的方便。
大多數(shù)重復(fù)記錄分為兩類:重復(fù)意義和非唯一鍵。在Navicat使用教程:如何在MySQL中定位和刪除有重復(fù)意義的值中,如何識別和刪除具有重復(fù)意義的值涉及到重復(fù)意義;在Navicat使用教程:如何用非唯一鍵識別重復(fù)項中涉及到如何識別非唯一密鑰。這意味著同一表中的兩個記錄具有相同的鍵,但可能具有或不具有不同的值和含義。這篇文章將介紹如何刪除具有重復(fù)數(shù)據(jù)但具有不同鍵的行。
按類型標(biāo)識重復(fù)項
在Navicat使用教程:如何用非唯一鍵識別重復(fù)項中顯示的最后一個查詢以易于直觀掃描的格式列出了所有重復(fù)項:
Repetitions row_data ---------------------------------------------------------------- 2 22 (DAVIS, JENNIFER) | 22 (DAVIS, JENNIFER) 2 23 (LOLLOBRIGIDA, JOHNNY) | 23 (GABLE, CHRISTIAN) 2 41 (WAHLBERG, NICK) | 12 (WAHLBERG, NICK)
在識別了所有重復(fù)的鍵和值之后,我們可以決定如何最好地處理冗余數(shù)據(jù)。
JENNIFER DAVIS以相同的22鍵出現(xiàn)在兩個記錄中,使這些行完全重復(fù)。Nick Walberg的名稱字段是重復(fù)的,但ID不是。還有一個與兩個無關(guān)的演員相關(guān)聯(lián)的復(fù)制鍵:“JOHNNY LOLLOBRIGIDA”和“CHRISTIAN GABLE”的復(fù)制鍵#23。對于22和23的重復(fù)鍵,第一個鍵是真正的重復(fù)鍵,而第二個鍵只需要為其中一個記錄生成一個新鍵。
使用刪除聯(lián)接刪除行
在Navicat使用教程:如何在MySQL中定位和刪除有重復(fù)意義的值中,我們通過對值執(zhí)行搜索和替換,從選擇的結(jié)果集中刪除了重復(fù)的值。在這里,我們將使用DELETE JOIN語句永久刪除其中一個重復(fù)的行。
因為我們正在比較同一個表中的字段,所以必須將該表與其自身聯(lián)接。我們可以通過比較WHERE子句中的ID來選擇保留較低或較高的ID號。以下語句保留最高的ID:
DELETE a FROM wp.amalgamated_actors a INNER JOIN wp.amalgamated_actors a2 WHERE a.id < a2.id AND a.first_name = a2.first_name AND a.last_name = a2.last_name; 1 row(s) affected 0.093 sec
在本例中,受影響(已刪除)行是標(biāo)識為12的NICK WAHLBERG??焖龠x擇確認結(jié)果:
id first_name last_name ------------------------------------- 10 PENELOPE GUINESS 12 NICK WAHLBERG 14 ED CHASE 22 JENNIFER DAVIS 23 JOHNNY LOLLOBRIGIDA 27 BETTE NICHOLSON 34 GRACE MOSTEL 39 JOE SWANK 23 CHRISTIAN GABLE 22 JENNIFER DAVIS
如果要保持最低的ID,只需將a.id
id first_name last_name ------------------------------------- 10 PENELOPE GUINESS 14 ED CHASE 22 JENNIFER DAVIS 23 JOHNNY LOLLOBRIGIDA 27 BETTE NICHOLSON 34 GRACE MOSTEL 41 NICK WAHLBERG 39 JOE SWANK 23 CHRISTIAN GABLE 22 JENNIFER DAVIS
刪除具有非唯一鍵的行
在JENNIFER DAVIS的例子中,他出現(xiàn)兩次,同一個ID為22,我們需要使用不同的方法,因為使用a.id=a2.id運行上面的語句將針對表中的每一行!原因是我們基本上是在將每一行與自身進行匹配!在下一篇文章中,我們將學(xué)習(xí)如何刪除具有非唯一鍵的行,如這些鍵。
購買Navicat Premium正版授權(quán),請點擊“咨詢在線客服”喲!