Mysql 删除数据表重复行 | 您所在的位置:网站首页 › sql语句删除重复行 › Mysql 删除数据表重复行 |
准备示例数据
以下sql创建表,并将示例数据插入到用于演示的contacts表中。 CREATE TABLE contacts ( id INT PRIMARY KEY AUTO_INCREMENT, first_val VARCHAR(50) DEFAULT NULL, last_val VARCHAR(50) DEFAULT NULL, email VARCHAR(255) NOT NULL ); INSERT INTO contacts (first_val,last_val,email) VALUES ('Carine ','Schmitt','[email protected]'), ('Zbyszek ','Piestrzeniewicz','[email protected]'), ('Roland','Keitel','[email protected]'), ('Julie','Murphy','[email protected]'), ('Kwai','Lee','[email protected]'), ('Jean','King','[email protected]'), ('Susan','Nelson','[email protected]'), ('Jean','King','[email protected]'), ('Peter','Ferguson','[email protected]'), ('Jonas ','Bergulfsen','[email protected]'), ('Janine ','Labrune','[email protected]'), ('Susan','Nelson','[email protected]'), ('Janine ','Labrune','[email protected]'), ('Jonas ','Bergulfsen','[email protected]'), ('Janine ','Labrune','[email protected]'), ('Susan','Nelson','[email protected]'), ('Roland','Keitel','[email protected]'); 方式一 克隆表删除重复的行 以下是使用克隆/复制表删除重复行的步骤 克隆需要删除重复数据的表 ,其结构与要删除重复行的原始表相同。 将原始表中的不同行插入直接表。 删除原始表或修改原始表名并将克隆表重命名为原始表。例如,以下语句从contacts表中删除具有重复电子邮件(email)的行记录: -- step1 克隆/复制表结构 CREATE TABLE contacts_temp LIKE contacts; -- step2 数据不重复插入克隆表 INSERT INTO contacts_temp(first_val,last_val,email) SELECT first_val,last_val,email FROM contacts GROUP BY email; -- step3 修改原始表以作备份,出错可以还原 ALTER TABLE contacts RENAME TO contacts_copy; -- step4 修改原始表为克隆表 ALTER TABLE contacts_temp RENAME TO contacts; 方式二 DELETE JOIN 删除重复行以下查询返回contacts表中的重复email值: SELECT email, COUNT( email ) FROM contacts GROUP BY email HAVING COUNT( email ) > 1;可以看到,表中有重复email行记录。 使用DELETE JOIN语句删除重复的行MySQL提供了可用于快速删除重复行的DELETE JOIN语句。 以下语句删除重复的行并保持最高的ID: DELETE t1 FROM contacts t1 INNER JOIN contacts t2 WHERE t1.id < t2.id AND t1.email = t2.email;重复行记录已被删除。我们再次执行查找重复的电子邮件的查询: SELECT email, COUNT( email ) FROM contacts GROUP BY email HAVING COUNT( email ) > 1;该查询返回一个空集合,这意味着重复的行已被删除。 |
CopyRight 2018-2019 实验室设备网 版权所有 |