Много путей приводят к Риму. Это - то. Это очень быстро. Таким образом, можно использовать его с большими базами данных. Не забывайте индексы. Прием: сделайте phoneNo уникальный, и использование "игнорируют".
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;
Если таблица данных уже существует, то только необходимо работать, создать выбор таблицы с помощью следующего вставляют, игнорируют выбор. В конце необходимо выполнить некоторые операторы переименования таблицы.Это все.
Это обходное решение очень, намного быстрее затем удалить операция.
Можно выбрать уникальные:
select distinct(phoneNo) from bkPhone
и помещенный их в другую таблицу, удалите старую таблицу и переименуйте новую к старому названию.
Mysql также включал:
http://mssql-to-postgresql.blogspot.com/2007/12/deleting-duplicates-in-postgresql-ms.html
MySQL жалуется, потому что он не имеет никакого смысла. Вы пытающийся к совокупному использованию 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
)