Navicat使用教程:在MySQL中使用SELECT DISTINCT消除重復(fù)行
Navicat Premium是一個(gè)可連接多種數(shù)據(jù)庫(kù)的管理工具,它可以讓你以單一程序同時(shí)連接到MySQL、Oracle及PostgreSQL數(shù)據(jù)庫(kù),讓管理不同類型的數(shù)據(jù)庫(kù)更加的方便。
MySQL為處理重復(fù)數(shù)據(jù)提供了無(wú)數(shù)種選擇。大多數(shù)可以使用一個(gè)語(yǔ)句進(jìn)行更新或刪除。但是,有時(shí)必須發(fā)出多個(gè)命令才能完成任務(wù)。今天的博客將提供一個(gè)解決方案,它使用一個(gè)臨時(shí)表和一個(gè)SELECT DISTINCT查詢。
MySQL中的永久表與臨時(shí)表
需要注意的是,我們今天將在這里創(chuàng)建的臨時(shí)表與MySQL中的真正臨時(shí)表不同,因?yàn)槲覀儧]有向CREATE TABLE 語(yǔ)句中添加臨時(shí)關(guān)鍵字。
在MySQL中,臨時(shí)表是一種特殊的表類型,它允許您存儲(chǔ)一個(gè)臨時(shí)結(jié)果集,您可以在一個(gè)會(huì)話中重復(fù)使用多次。當(dāng)使用單個(gè)SELECT語(yǔ)句查詢數(shù)據(jù)是不可能的或很昂貴時(shí),臨時(shí)表就派上用場(chǎng)了。像使用TEMPORARY關(guān)鍵字創(chuàng)建的臨時(shí)表一樣,我們的“temporary”表將存儲(chǔ)SELECT查詢的即時(shí)結(jié)果,以便我們可以發(fā)出一個(gè)或多個(gè)附加查詢來(lái)完全處理數(shù)據(jù)。然后我們將用臨時(shí)表替換目標(biāo)表。
從amalgamated_actors表中刪除重復(fù)行
在如何刪除MySQL(第3部分)博客中具有不同ID的重復(fù)行中,我們成功地刪除了包含重復(fù)名稱的行。但是,這仍然會(huì)留下ID和名稱相同的行,換句話說(shuō),整個(gè)行都是重復(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
這是一個(gè)理想的臨時(shí)表方法的候選。
MySQL提供了特殊的CREATE TABLE ... LIKE命令,基于另一個(gè)表的定義創(chuàng)建一個(gè)空表,包括在原始表中定義的任何列屬性和索引。
因此,我們可以基于合并后的演員表創(chuàng)建一個(gè)表,如下所示:
-- Create temporary table CREATE TABLE wp.temp_table LIKE wp.amalgamated_actors;
下面是將amalgamated_actors表中的所有數(shù)據(jù)復(fù)制到temp_table中的語(yǔ)句:
INSERT INTO wp.temp_table SELECT DISTINCT * FROM wp.amalgamated_actors;
SELECT DISTINCT子句是刪除重復(fù)行的關(guān)鍵。
最后,我們需要重命名原始表,以便用臨時(shí)表替換它,并刪除原始表:
-- 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
我們?cè)瓉?lái)的amalgamated_actors表已經(jīng)不復(fù)存在了,取而代之的是“temp”表。
使用唯一約束刪除重復(fù)行
在下一篇關(guān)于處理重復(fù)數(shù)據(jù)的文章中,我們將使用唯一約束來(lái)刪除具有重復(fù)名稱字段的行,不管ID是否重復(fù)。
購(gòu)買Navicat Premium正版授權(quán),請(qǐng)點(diǎn)擊“”喲!