Navicat使用教程:在MySQL中使用SELECT DISTINCT消除重複行

下載Navicat Premium最新版本數據庫

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

MySQL爲處理重複數據提供了無數種選擇。大多數可使用一個語句進行更新或刪除。可是,有時必須發出多個命令才能完成任務。今天的博客將提供一個解決方案,它使用一個臨時表和一個SELECT DISTINCT查詢。spa

MySQL中的永久表與臨時表

須要注意的是,咱們今天將在這裏建立的臨時表與MySQL中的真正臨時表不一樣,由於咱們沒有向CREATE TABLE 語句中添加臨時關鍵字。code

在MySQL中,臨時表是一種特殊的表類型,它容許您存儲一個臨時結果集,您能夠在一個會話中重複使用屢次。當使用單個SELECT語句查詢數據是不可能的或很昂貴時,臨時表就派上用場了。像使用TEMPORARY關鍵字建立的臨時表同樣,咱們的「temporary」表將存儲SELECT查詢的即時結果,以便咱們能夠發出一個或多個附加查詢來徹底處理數據。而後咱們將用臨時表替換目標表。索引

從amalgamated_actors表中刪除重複行

在如何刪除MySQL(第3部分)博客中具備不一樣ID的重複行中,咱們成功地刪除了包含重複名稱的行。可是,這仍然會留下ID和名稱相同的行,換句話說,整個行都是重複的。例如,咱們能夠在下面的結果集中看到「22 Jennifer Davis」出現了兩次:ci

1rem

2get

3博客

4table

5

6

7

8

9

10

11

12

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命令,基於另外一個表的定義建立一個空表,包括在原始表中定義的任何列屬性和索引。

所以,咱們能夠基於合併後的演員表建立一個表,以下所示:

1

2

-- Create temporary table

CREATE TABLE wp.temp_table LIKE wp.amalgamated_actors;

下面是將amalgamated_actors表中的全部數據複製到temp_table中的語句:

1

2

INSERT INTO wp.temp_table

    SELECT DISTINCT FROM wp.amalgamated_actors;

SELECT DISTINCT子句是刪除重複行的關鍵。

最後,咱們須要重命名原始表,以便用臨時表替換它,並刪除原始表:

1

2

3

4

5

-- 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只有一排:

1

2

3

4

5

6

7

8

9

10

11

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是否重複。

相關文章
相關標籤/搜索