Navicat使用教程:如何删除MySQL中具有不同ID的重复行

下载Navicat Premium最新版本

Navicat Premium是一个可连接多种数据库的管理工具,它可以让你以单一程序同时连接到MySQL、Oracle及PostgreSQL数据库,让管理不同类型的数据库更加的方便。

大多数重复记录分为两类:重复意义和非唯一键。在Navicat使用教程:如何在MySQL中定位和删除有重复意义的值中,如何识别和删除具有重复意义的值涉及到重复意义;在Navicat使用教程:如何用非唯一键识别重复项中涉及到如何识别非唯一**。这意味着同一表中的两个记录具有相同的键,但可能具有或不具有不同的值和含义。这篇文章将介绍如何删除具有重复数据但具有不同键的行。

Navicat使用教程:如何删除MySQL中具有不同ID的重复行

按类型标识重复项

Navicat使用教程:如何用非唯一键识别重复项中显示的最后一个查询以易于直观扫描的格式列出了所有重复项:

1

2

3

4

5

Repetitions     row_data

----------------------------------------------------------------

2       22 (DAVIS, JENNIFER) | 22 (DAVIS, JENNIFER)

2       23 (LOLLOBRIGIDA, JOHNNY) | 23 (GABLE, CHRISTIAN)

2       41 (WAHLBERG, NICK) | 12 (WAHLBERG, NICK)

在识别了所有重复的键和值之后,我们可以决定如何最好地处理冗余数据。

JENNIFER DAVIS以相同的22键出现在两个记录中,使这些行完全重复。Nick Walberg的名称字段是重复的,但ID不是。还有一个与两个无关的演员相关联的复制键:“JOHNNY LOLLOBRIGIDA”和“CHRISTIAN GABLE”的复制键#23。对于22和23的重复键,第一个键是真正的重复键,而第二个键只需要为其中一个记录生成一个新键。

使用删除联接删除行

Navicat使用教程:如何在MySQL中定位和删除有重复意义的值中,我们通过对值执行搜索和替换,从选择的结果集中删除了重复的值。在这里,我们将使用DELETE JOIN语句永久删除其中一个重复的行。

因为我们正在比较同一个表中的字段,所以必须将该表与其自身联接。我们可以通过比较WHERE子句中的ID来选择保留较低或较高的ID号。以下语句保留最高的ID:

1

2

3

4

5

6

7

DELETE FROM wp.amalgamated_actors a

  INNER JOIN wp.amalgamated_actors a2

WHERE a.id < a2.id

AND   a.first_name = a2.first_name

AND   a.last_name  = a2.last_name;

 

1 row(s) affected   0.093 sec

在本例中,受影响(已删除)行是标识为12的NICK WAHLBERG。快速选择确认结果:

1

2

3

4

5

6

7

8

9

10

11

12

id      first_name      last_name

-------------------------------------

10      PENELOPE        GUINESS

12      NICK        WAHLBERG

14      ED      CHASE

22      JENNIFER        DAVIS

23      JOHNNY      LOLLOBRIGIDA

27      BETTE       NICHOLSON

34      GRACE       MOSTEL

39      JOE     SWANK

23      CHRISTIAN       GABLE

22      JENNIFER        DAVIS

如果要保持最低的ID,只需将a.ida2.id。

1

2

3

4

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

删除具有非唯一键的行

在JENNIFER DAVIS的例子中,他出现两次,同一个ID为22,我们需要使用不同的方法,因为使用a.id=a2.id运行上面的语句将针对表中的每一行!原因是我们基本上是在将每一行与自身进行匹配!在下一篇文章中,我们将学习如何删除具有非唯一键的行,如这些键。