Navicat使用教程:在MySQL中使用SELECT DISTINCT消除重復(fù)行
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),請點擊“咨詢在線客服”喲!