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

    文檔首頁>>Navicat使用教程-2019.1>>Navicat使用教程:在MySQL中使用SELECT DISTINCT消除重復(fù)行

    Navicat使用教程:在MySQL中使用SELECT DISTINCT消除重復(fù)行


    下載Navicat Premium最新版本

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

    MySQL為處理重復(fù)數(shù)據(jù)提供了無數(shù)種選擇。大多數(shù)可以使用一個語句進(jìn)行更新或刪除。但是,有時必須發(fā)出多個命令才能完成任務(wù)。今天的博客將提供一個解決方案,它使用一個臨時表和一個SELECT DISTINCT查詢。

    MySQL中的永久表與臨時表

    需要注意的是,我們今天將在這里創(chuàng)建的臨時表與MySQL中的真正臨時表不同,因為我們沒有向CREATE TABLE 語句中添加臨時關(guān)鍵字。

    在MySQL中,臨時表是一種特殊的表類型,它允許您存儲一個臨時結(jié)果集,您可以在一個會話中重復(fù)使用多次。當(dāng)使用單個SELECT語句查詢數(shù)據(jù)是不可能的或很昂貴時,臨時表就派上用場了。像使用TEMPORARY關(guān)鍵字創(chuàng)建的臨時表一樣,我們的“temporary”表將存儲SELECT查詢的即時結(jié)果,以便我們可以發(fā)出一個或多個附加查詢來完全處理數(shù)據(jù)。然后我們將用臨時表替換目標(biāo)表。

    從amalgamated_actors表中刪除重復(fù)行

    在如何刪除MySQL(第3部分)博客中具有不同ID的重復(fù)行中,我們成功地刪除了包含重復(fù)名稱的行。但是,這仍然會留下ID和名稱相同的行,換句話說,整個行都是重復(fù)的。例如,我們可以在下面的結(jié)果集中看到“22 Jennifer Davis”出現(xiàn)了兩次:

    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

    這是一個理想的臨時表方法的候選。

    MySQL提供了特殊的CREATE TABLE ... LIKE命令,基于另一個表的定義創(chuàng)建一個空表,包括在原始表中定義的任何列屬性和索引。

    因此,我們可以基于合并后的演員表創(chuàng)建一個表,如下所示:

    -- Create temporary table 
    CREATE TABLE wp.temp_table LIKE wp.amalgamated_actors;

    下面是將amalgamated_actors表中的所有數(shù)據(jù)復(fù)制到temp_table中的語句:

    INSERT INTO wp.temp_table 
        SELECT DISTINCT * FROM wp.amalgamated_actors;

    SELECT DISTINCT子句是刪除重復(fù)行的關(guān)鍵。

    最后,我們需要重命名原始表,以便用臨時表替換它,并刪除原始表:

    -- Rename and drop 
    RENAME TABLE wp.amalgamated_actors TO wp.old_amalgamated_actors, 
                 wp.temp_table TO wp.amalgamated_actors; 
    
    DROP TABLE wp.old_amalgamated_actors;

    現(xiàn)在,JENNIFER DAVIS只有一排:

    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

    我們原來的amalgamated_actors表已經(jīng)不復(fù)存在了,取而代之的是“temp”表。

    使用唯一約束刪除重復(fù)行

    在下一篇關(guān)于處理重復(fù)數(shù)據(jù)的文章中,我們將使用唯一約束來刪除具有重復(fù)名稱字段的行,不管ID是否重復(fù)。

    購買Navicat Premium正版授權(quán),請點擊“咨詢在線客服”喲!

    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); })();