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