Navicat Premium是一個可鏈接多種數據庫的管理工具,它可讓你以單一程序同時鏈接到MySQL、Oracle及PostgreSQL數據庫,讓管理不一樣類型的數據庫更加的方便。工具
MySQL爲處理重複數據提供了無數種選擇。大多數可使用一個語句進行更新或刪除。可是,有時必須發出多個命令才能完成任務。今天的博客將提供一個解決方案,它使用一個臨時表和一個SELECT DISTINCT查詢。spa
須要注意的是,咱們今天將在這裏建立的臨時表與MySQL中的真正臨時表不一樣,由於咱們沒有向CREATE TABLE 語句中添加臨時關鍵字。code
在MySQL中,臨時表是一種特殊的表類型,它容許您存儲一個臨時結果集,您能夠在一個會話中重複使用屢次。當使用單個SELECT語句查詢數據是不可能的或很昂貴時,臨時表就派上用場了。像使用TEMPORARY關鍵字建立的臨時表同樣,咱們的「temporary」表將存儲SELECT查詢的即時結果,以便咱們能夠發出一個或多個附加查詢來徹底處理數據。而後咱們將用臨時表替換目標表。索引
在如何刪除MySQL(第3部分)博客中具備不一樣ID的重複行中,咱們成功地刪除了包含重複名稱的行。可是,這仍然會留下ID和名稱相同的行,換句話說,整個行都是重複的。例如,咱們能夠在下面的結果集中看到「22 Jennifer Davis」出現了兩次:ci
1rem 2get 3博客 4table 5 6 7 8 9 10 11 12 |
|
這是一個理想的臨時表方法的候選。
MySQL提供了特殊的CREATE TABLE ... LIKE命令,基於另外一個表的定義建立一個空表,包括在原始表中定義的任何列屬性和索引。
所以,咱們能夠基於合併後的演員表建立一個表,以下所示:
1 2 |
|
下面是將amalgamated_actors表中的全部數據複製到temp_table中的語句:
1 2 |
|
SELECT DISTINCT子句是刪除重複行的關鍵。
最後,咱們須要重命名原始表,以便用臨時表替換它,並刪除原始表:
1 2 3 4 5 |
|
如今,JENNIFER DAVIS只有一排:
1 2 3 4 5 6 7 8 9 10 11 |
|
咱們原來的amalgamated_actors表已經不復存在了,取而代之的是「temp」表。
在下一篇關於處理重複數據的文章中,咱們將使用惟一約束來刪除具備重複名稱字段的行,無論ID是否重複。