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

下载Navicat Premium最新版本

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

MySQL为处理重复数据提供了无数种选择。大多数可以使用一个语句进行更新或删除。但是,有时必须发出多个命令才能完成任务。今天的博客将提供一个解决方案,它使用一个临时表和一个SELECT DISTINCT查询。

MySQL中的永久表与临时表

需要注意的是,我们今天将在这里创建的临时表与MySQL中的真正临时表不同,因为我们没有向CREATE TABLE 语句中添加临时关键字。

在MySQL中,临时表是一种特殊的表类型,它允许您存储一个临时结果集,您可以在一个会话中重复使用多次。当使用单个SELECT语句查询数据是不可能的或很昂贵时,临时表就派上用场了。像使用TEMPORARY关键字创建的临时表一样,我们的“temporary”表将存储SELECT查询的即时结果,以便我们可以发出一个或多个附加查询来完全处理数据。然后我们将用临时表替换目标表。

从amalgamated_actors表中删除重复行

在如何删除MySQL(第3部分)博客中具有不同ID的重复行中,我们成功地删除了包含重复名称的行。但是,这仍然会留下ID和名称相同的行,换句话说,整个行都是重复的。例如,我们可以在下面的结果集中看到“22 Jennifer Davis”出现了两次:

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

这是一个理想的临时表方法的候选。

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

转载于:https://my.oschina.net/u/4009527/blog/3008826

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值