• <menu id="w2i4a"></menu>
  • logo Navicat使用教程-2019.1

    文檔首頁(yè)>>Navicat使用教程-2019.1>>Navicat使用教程:如何用非唯一鍵識(shí)別重復(fù)項(xiàng)

    Navicat使用教程:如何用非唯一鍵識(shí)別重復(fù)項(xiàng)


    下載Navicat Premium最新版本

    Navicat Premium是一個(gè)可連接多種數(shù)據(jù)庫(kù)的管理工具,它可以讓你以單一程序同時(shí)連接到MySQL、Oracle及PostgreSQL數(shù)據(jù)庫(kù),讓管理不同類型的數(shù)據(jù)庫(kù)更加的方便。

    大多數(shù)重復(fù)記錄分為兩類:重復(fù)意義和非唯一鍵。在MySQL文章中,如何識(shí)別和刪除具有重復(fù)意義的值涉及到重復(fù)意義;在這篇文章中,我們將討論如何識(shí)別非唯一鍵。這意味著同一表中的兩個(gè)記錄具有相同的鍵,但可能具有或不具有不同的值和含義。

    Navicat

    形成機(jī)制

    即使是設(shè)計(jì)良好的數(shù)據(jù)庫(kù)也可以累積非唯一的鍵重復(fù)。它通常是從外部源(如文本、csv或excel文件)以及數(shù)據(jù)源導(dǎo)入數(shù)據(jù)的結(jié)果。即使合并來(lái)自兩個(gè)不同數(shù)據(jù)庫(kù)的數(shù)據(jù),如果您以某種方式組合每個(gè)數(shù)據(jù)庫(kù)以生成一個(gè)新的鍵,也可能會(huì)創(chuàng)建重復(fù)的鍵——當(dāng)然,假設(shè)新的鍵列支持非唯一值。例如,連接兩個(gè)數(shù)字以生成一個(gè)新密鑰可能會(huì)有問(wèn)題:

    Key 1	   	Key 2	   	New Key
    --------------------------
    10		25		1025
    102		5		1025 !!!

    示例表

    在支持復(fù)雜系統(tǒng)的數(shù)據(jù)庫(kù)中,防止出現(xiàn)重復(fù)鍵并不總是可行的。重要的是能夠在它們污染您的數(shù)據(jù)之前快速有效地處理它們。

    讓我們首先從重疊鍵中分離出真正的重復(fù)值。

    這是合并兩個(gè)參與者數(shù)據(jù)源的結(jié)果。你會(huì)注意到有幾個(gè)重復(fù)的名字,特別是“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是我們?cè)谏掀恼轮刑接戇^(guò)的意義重復(fù)的例子。另一方面, JENNIFER DAVIS也出現(xiàn)在兩張唱片中,同一個(gè)鍵是22。還有一個(gè)與兩個(gè)無(wú)關(guān)的演員相關(guān)聯(lián)的復(fù)制鍵:“JOHNNY LOLLOBRIGIDA”和“CHRISTIAN GABLE”的復(fù)制鍵#23。對(duì)于22和23的重復(fù)鍵,第一個(gè)鍵是真正的重復(fù)鍵,而第二個(gè)鍵只需要為其中一個(gè)記錄生成一個(gè)新鍵。

    識(shí)別和計(jì)數(shù)重復(fù)項(xiàng)

    下面的查詢將標(biāo)識(shí)上表中共享公共ID的所有記錄。建議使用MySQL group_concat()函數(shù)在一行中將重復(fù)的行格式化在一起:

    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)

    如果希望同時(shí)查找所有重復(fù)項(xiàng)(即重復(fù)含義和非唯一鍵重復(fù)項(xiàng)),可以將上述查詢與使用UNION運(yùn)算符檢查重復(fù)名稱的查詢結(jié)合起來(lái):

    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;

    突出顯示一個(gè)結(jié)果集中的所有重復(fù)項(xiàng):

    Repetitions	    	row_data
    -------------------------------------------------------------
    2		22 (DAVIS, JENNIFER) | 22 (DAVIS, JENNIFER)
    2		23 (LOLLOBRIGIDA, JOHNNY) | 23 (GABLE, CHRISTIAN)
    2		41 (WAHLBERG, NICK) | 12 (WAHLBERG, NICK)

    結(jié)論

    在MySQL中創(chuàng)建一個(gè)查詢來(lái)標(biāo)識(shí)重復(fù)的鍵相對(duì)簡(jiǎn)單,因?yàn)槟恍枰阪I字段上分組,并包含“Having COUNT(*) > 1”子句。以后的文章將回顧一些刪除重復(fù)行和更新鍵的不同方法。

    購(gòu)買Navicat Premium正版授權(quán),請(qǐng)點(diǎn)擊“咨詢?cè)诰€客服”喲!

    PyCharm

    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();