翻譯|使用教程|編輯:黃竹雯|2019-02-11 09:26:20.000|閱讀 886 次
概述:本篇文章介紹了如何在MySQL中使用SELECT DISTINCT消除重復行。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
Navicat Premium是一個可連接多種數據庫的管理工具,它可以讓你以單一程序同時連接到MySQL、Oracle及PostgreSQL數據庫,讓管理不同類型的數據庫更加的方便。
MySQL為處理重復數據提供了無數種選擇。大多數可以使用一個語句進行更新或刪除。但是,有時必須發出多個命令才能完成任務。今天的博客將提供一個解決方案,它使用一個臨時表和一個SELECT DISTINCT查詢。
需要注意的是,我們今天將在這里創建的臨時表與MySQL中的真正臨時表不同,因為我們沒有向CREATE TABLE 語句中添加臨時關鍵字。
在MySQL中,臨時表是一種特殊的表類型,它允許您存儲一個臨時結果集,您可以在一個會話中重復使用多次。當使用單個SELECT語句查詢數據是不可能的或很昂貴時,臨時表就派上用場了。像使用TEMPORARY關鍵字創建的臨時表一樣,我們的“temporary”表將存儲SELECT查詢的即時結果,以便我們可以發出一個或多個附加查詢來完全處理數據。然后我們將用臨時表替換目標表。
在如何刪除MySQL(第3部分)博客中具有不同ID的重復行中,我們成功地刪除了包含重復名稱的行。但是,這仍然會留下ID和名稱相同的行,換句話說,整個行都是重復的。例如,我們可以在下面的結果集中看到“22 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 22 JENNIFER DAVIS
這是一個理想的臨時表方法的候選。
MySQL提供了特殊的CREATE TABLE ... LIKE命令,基于另一個表的定義創建一個空表,包括在原始表中定義的任何列屬性和索引。
因此,我們可以基于合并后的演員表創建一個表,如下所示:
-- Create temporary table CREATE TABLE wp.temp_table LIKE wp.amalgamated_actors;
下面是將amalgamated_actors表中的所有數據復制到temp_table中的語句:
INSERT INTO wp.temp_table SELECT DISTINCT * FROM wp.amalgamated_actors;
SELECT DISTINCT子句是刪除重復行的關鍵。
最后,我們需要重命名原始表,以便用臨時表替換它,并刪除原始表:
-- 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;
現在,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表已經不復存在了,取而代之的是“temp”表。
在下一篇關于處理重復數據的文章中,我們將使用唯一約束來刪除具有重復名稱字段的行,不管ID是否重復。
購買Navicat Premium正版授權,請點擊“”喲!
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn