我已经给客户端以下查询删除重复的电话号码。 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
)
答案 0 :(得分:14)
通往罗马的方式很多。这是一。它非常快。所以你可以在大数据库中使用它。别忘了它们。 诀窍是:make phoneNo unique并使用“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;
如果数据表已经存在,那么您只需运行create table select,并使用以下insert ignore select。最后,您必须运行一些表重命名语句。就是这样。
此解决方法比删除操作快得多。
答案 1 :(得分:5)
您可以通过以下方式选择独特的:
select distinct(phoneNo) from bkPhone
并将它们放入另一个表中,删除旧表并将新表重命名为旧名称。
答案 2 :(得分:2)
min()
列进行汇总。
现在,如果您尝试删除同一个人的重复电话号码,则SQL应为:
delete from bkPhone
where phoneId not in
(
select min(phoneId)
from bkPhone
group by firstName,lastName /* i.e. grouping by person and NOT grouping by phoneId */
having count(*) >= 1
)
答案 3 :(得分:1)