Pergunta

Isso me mostra todos os primeiros nomes e sobrenomes que têm exatamente duas entradas que são idênticas

SELECT `firstname`,`lastname`,COUNT(*) AS Count 
FROM `people` 
GROUP BY `firstname`,`lastname`
HAVING Count = 2

Como faço para transformar isso em uma exclusão de onde a declaração com um limite para remover apenas uma de cada uma das entradas e deixar a outra.

Ok, isso parece ser o caminho técnico, eu só vou fazer isso em um php enquanto loop

Foi útil?

Solução

Você pode criar uma tabela com 1 registro de cada uma das duplicatas: exclua todos os registros DUP da tabela People e, em seguida, reinsira os registros DUP.

-- Setup for example
create table people (fname varchar(10), lname varchar(10));

insert into people values ('Bob', 'Newhart');
insert into people values ('Bob', 'Newhart');
insert into people values ('Bill', 'Cosby');
insert into people values ('Jim', 'Gaffigan');
insert into people values ('Jim', 'Gaffigan');
insert into people values ('Adam', 'Sandler');

-- Show table with duplicates
select * from people;

-- Create table with one version of each duplicate record
create table dups as 
    select distinct fname, lname, count(*) 
    from people group by fname, lname 
    having count(*) > 1;

-- Delete all matching duplicate records
delete people from people inner join dups 
on people.fname = dups.fname AND 
   people.lname = dups.lname;

-- Insert single record of each dup back into table
insert into people select fname, lname from dups;

-- Show Fixed table
select * from people;

Outras dicas

Você poderia ter usado uma bandeira na lista de departamentos que define mostra no calendário de nível superior.Em seguida, crie uma visualização de filtragem por este valor e, em seguida, use essa visualização na sobreposição.Nenhum código!

Crie uma nova tabela e adicione uma chave exclusiva em (primeiro nome, último nome). Em seguida, insira as linhas na tabela antiga na nova tabela. Em seguida, renomeie as tabelas.

mysql> select * from t;
+-----------+----------+
| firstname | lastname |
+-----------+----------+
| A         | B        | 
| A         | B        | 
| X         | Y        | 
+-----------+----------+
3 rows in set (0.00 sec)

mysql> create table t2 like t;
Query OK, 0 rows affected (0.00 sec)

mysql> alter table t2 add unique key name(firstname,lastname);
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> insert ignore into t2 select * from t;
Query OK, 2 rows affected (0.00 sec)
Records: 3  Duplicates: 1  Warnings: 0


mysql> select * from t2;
+-----------+----------+
| firstname | lastname |
+-----------+----------+
| A         | B        | 
| X         | Y        | 
+-----------+----------+
2 rows in set (0.01 sec)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top