翻譯|使用教程|編輯:黃竹雯|2019-01-30 10:51:17.000|閱讀 635 次
概述:本篇文章介紹了如何用非唯一鍵識別重復項。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
Navicat Premium是一個可連接多種數據庫的管理工具,它可以讓你以單一程序同時連接到MySQL、Oracle及PostgreSQL數據庫,讓管理不同類型的數據庫更加的方便。
大多數重復記錄分為兩類:重復意義和非唯一鍵。在MySQL文章中,如何識別和刪除具有重復意義的值涉及到重復意義;在這篇文章中,我們將討論如何識別非唯一鍵。這意味著同一表中的兩個記錄具有相同的鍵,但可能具有或不具有不同的值和含義。
即使是設計良好的數據庫也可以累積非唯一的鍵重復。它通常是從外部源(如文本、csv或excel文件)以及數據源導入數據的結果。即使合并來自兩個不同數據庫的數據,如果您以某種方式組合每個數據庫以生成一個新的鍵,也可能會創建重復的鍵——當然,假設新的鍵列支持非唯一值。例如,連接兩個數字以生成一個新密鑰可能會有問題:
Key 1 Key 2 New Key -------------------------- 10 25 1025 102 5 1025 !!!
在支持復雜系統的數據庫中,防止出現重復鍵并不總是可行的。重要的是能夠在它們污染您的數據之前快速有效地處理它們。
讓我們首先從重疊鍵中分離出真正的重復值。
這是合并兩個參與者數據源的結果。你會注意到有幾個重復的名字,特別是“JENNIFER DAVIS”和“NICK WAHLBERG”:
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 41 NICK WAHLBERG 39 JOE SWANK 23 CHRISTIAN GABLE 22 JENNIFER DAVIS
Nick Walberg是我們在上篇文章中探討過的意義重復的例子。另一方面, JENNIFER DAVIS也出現在兩張唱片中,同一個鍵是22。還有一個與兩個無關的演員相關聯的復制鍵:“JOHNNY LOLLOBRIGIDA”和“CHRISTIAN GABLE”的復制鍵#23。對于22和23的重復鍵,第一個鍵是真正的重復鍵,而第二個鍵只需要為其中一個記錄生成一個新鍵。
下面的查詢將標識上表中共享公共ID的所有記錄。建議使用MySQL group_concat()函數在一行中將重復的行格式化在一起:
SELECT COUNT(*) as repetitions, group_concat(id, ' (', last_name, ', ', first_name, ') ' SEPARATOR ' | ') as row_data FROM amalgamated_actors GROUP BY id HAVING repetitions > 1; Repetitions row_data ------------------------------------------------------------- 2 22 (DAVIS, JENNIFER) | 22 (DAVIS, JENNIFER) 2 23 (LOLLOBRIGIDA, JOHNNY) | 23 (GABLE, CHRISTIAN)
如果希望同時查找所有重復項(即重復含義和非唯一鍵重復項),可以將上述查詢與使用UNION運算符檢查重復名稱的查詢結合起來:
SELECT COUNT(*) as repetitions, group_concat(id, ' (', last_name, ', ', first_name, ') ' SEPARATOR ' | ') as row_data FROM amalgamated_actors GROUP BY id HAVING repetitions > 1 UNION SELECT COUNT(*) as repetitions, group_concat(id, ' (', last_name, ', ', first_name, ') ' SEPARATOR ' | ') as row_data FROM amalgamated_actors GROUP BY last_name, first_name HAVING repetitions > 1;
突出顯示一個結果集中的所有重復項:
Repetitions row_data ------------------------------------------------------------- 2 22 (DAVIS, JENNIFER) | 22 (DAVIS, JENNIFER) 2 23 (LOLLOBRIGIDA, JOHNNY) | 23 (GABLE, CHRISTIAN) 2 41 (WAHLBERG, NICK) | 12 (WAHLBERG, NICK)
結論
在MySQL中創建一個查詢來標識重復的鍵相對簡單,因為您只需要在鍵字段上分組,并包含“Having COUNT(*) > 1”子句。以后的文章將回顧一些刪除重復行和更新鍵的不同方法。
購買Navicat Premium正版授權,請點擊“”喲!
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn