Pergunta
Se eu tiver de dados como este:
+---+----+
|Key|Name|
+---+----+
|1 |Dan |
+---+----+
|2 |Tom |
+---+----+
|3 |Jon |
+---+----+
|4 |Tom |
+---+----+
|5 |Sam |
+---+----+
|6 |Dan |
+---+----+
O que é a consulta SQL para trazer de volta os registros onde Name
é repetida 2 ou mais vezes?
Assim, o resultado que eu iria querer é
+---+
|Tom|
+---+
|Dan|
+---+
Solução
Não podia ser mais simples...
Select
Name,
Count(Name) As Count
From
Table
Group By
Name
Having
Count(Name) > 1
Order By
Count(Name) Desc
Isso também pode ser estendido para eliminar duplicados:
Delete
From
Table
Where
Key In (
Select
Max(Key)
From
Table
Group By
Name
Having
Count(Name) > 1)
Outras dicas
select name from table group by name having count(name) > 1
Isso também poderá ser feito por associar a tabela com ela mesma,
SELECT DISTINCT t1.name
FROM tbl t1
INNER JOIN tbl t2
ON t1.name = t2.name
WHERE t1.key != t2.key;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow