是一个可连接多种数据库的管理工具,它可以让你以单一程序同时连接到MySQL、Oracle及PostgreSQL数据库,让管理不同类型的数据库更加的方便。
大多数重复记录分为两类:重复意义和非唯一键。在中,如何识别和删除具有重复意义的值涉及到重复意义;在中涉及到如何识别非唯一密钥。这意味着同一表中的两个记录具有相同的键,但可能具有或不具有不同的值和含义。这篇文章将介绍如何删除具有重复数据但具有不同键的行。
按类型标识重复项
在中显示的最后一个查询以易于直观扫描的格式列出了所有重复项:
1 2 3 4 5 |
|
在识别了所有重复的键和值之后,我们可以决定如何最好地处理冗余数据。
JENNIFER DAVIS以相同的22键出现在两个记录中,使这些行完全重复。Nick Walberg的名称字段是重复的,但ID不是。还有一个与两个无关的演员相关联的复制键:“JOHNNY LOLLOBRIGIDA”和“CHRISTIAN GABLE”的复制键#23。对于22和23的重复键,第一个键是真正的重复键,而第二个键只需要为其中一个记录生成一个新键。
使用删除联接删除行
在中,我们通过对值执行搜索和替换,从选择的结果集中删除了重复的值。在这里,我们将使用DELETE JOIN语句永久删除其中一个重复的行。
因为我们正在比较同一个表中的字段,所以必须将该表与其自身联接。我们可以通过比较WHERE子句中的ID来选择保留较低或较高的ID号。以下语句保留最高的ID:
1 2 3 4 5 6 7 |
|
在本例中,受影响(已删除)行是标识为12的NICK WAHLBERG。快速选择确认结果:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
如果要保持最低的ID,只需将a.ida2.id。
1 2 3 4 5 6 7 8 9 10 11 12 |
|
删除具有非唯一键的行
在JENNIFER DAVIS的例子中,他出现两次,同一个ID为22,我们需要使用不同的方法,因为使用a.id=a2.id运行上面的语句将针对表中的每一行!原因是我们基本上是在将每一行与自身进行匹配!在下一篇文章中,我们将学习如何删除具有非唯一键的行,如这些键。