一尘不染

如何删除MySQL表中的重复项

mysql

我已向客户提供以下查询,以删除重复的电话号码。记录在MSSQL数据库中,但现在他们也需要在MySQL上进行记录,并且他们报告MySQL抱怨查询的格式。我已经包含了一个测试表的设置,该测试表具有重复的代码示例,但是真正重要的是删除查询。

我在无知和紧急情况下问这个问题,因为我仍在忙于下载和安装MySQL,在此期间也许有人可以提供帮助。

 create table bkPhone
 (
     phoneNo nvarchar(20),
     firstName nvarchar(20),
     lastName nvarchar(20)
 )
 GO

 insert bkPhone values('0783313780','Brady','Kelly')
 insert bkPhone values('0845319792','Mark','Smith')
 insert bkPhone values('0834976958','Bill','Jones')
 insert bkPhone values('0845319792','Mark','Smith')
 insert bkPhone values('0828329792','Mickey','Mouse')
 insert bkPhone values('0834976958','Bill','Jones')

 alter table bkPhone add phoneId int identity

 delete from bkPhone
 where phoneId not in
 (
     select min(phoneId)
     from bkPhone
     group by phoneNo,firstName,lastName
     having  count(*) >= 1
 )

阅读 275

收藏
2020-05-17

共1个答案

一尘不染

通往罗马的途径很多。这是一。非常快。因此,您可以将其用于大型数据库。不要忘记索引。诀窍是:使phoneNo唯一,并使用“ ignore”。

drop table if exists bkPhone_template;
create table bkPhone_template (
         phoneNo varchar(20),
         firstName varchar(20),
         lastName varchar(20)
 );

insert into bkPhone_template values('0783313780','Brady','Kelly');
 insert into bkPhone_template values('0845319792','Mark','Smith');
 insert into bkPhone_template values('0834976958','Bill','Jones');
 insert into bkPhone_template values('0845319792','Mark','Smith');
 insert into bkPhone_template values('0828329792','Mickey','Mouse');
 insert into bkPhone_template values('0834976958','Bill','Jones');

drop table if exists bkPhone;
create table bkPhone like bkPhone_template;
alter table bkPhone add unique (phoneNo);

insert  ignore into bkPhone (phoneNo,firstName,lastName) select phoneNo,firstName,lastName from bkPhone_template;

drop table bkPhone_template;

如果数据表已经存在,则只需运行带有以下插入忽略选择的创建表选择。最后,您必须运行一些表重命名语句。就这样。

此解决方法比删除操作快得多,而且快得多。

2020-05-17