Crie tabelas e dados de teste
# 创建表
create table if not exists t_duplicate (
name varchar(255) not null,
age int not null
);
# 插入测试数据
insert into t_duplicate(name, age) values('a', 1);
insert into t_duplicate(name, age) values('a', 2);
Consultar duplicatas em um único campo
Use a função count(), agrupe por agrupamento e tenha agrupamento para filtrar
select name, count(*) count
from t_duplicate
group by name
having count > 1;
group by name
:name
Agrupar de acordo com o campo.count(*)
: Calcule o número de registros em cada grupo.having count > 1
: Após agrupar, filtre os grupos cujo número de registro seja > 1.
resultado da pesquisa:
nome | contar |
---|---|
a | 2 |
Usando subconsultas e a função in
select *
from t_duplicate
where name in (
select name
from t_duplicate
group by name
having count(*) > 1
)
- Subconsulta: De acordo com
name
o agrupamento, filtre o agrupamento cujo número de registro seja > 1, ou seja, a consulta é repetidaname
. - Consulta externa: use para
in
filtrarname
registros duplicados.
resultado da pesquisa:
nome | idade |
---|---|
a | 1 |
a | 2 |
Use funções de janela e particione por partição
select `name`, count
from (
select name, (count(*) over (partition by name)) as count
from t_duplicate
) t
where count > 1
partition by name
:name
Particionado por campos, os mesmosname
valores estão em uma partição.count(*) over
: conte o número de registros para cada partição.count > 1
: Filtra dados com número de registro de partição > 1.
resultado da pesquisa:
nome | contar |
---|---|
a | 2 |
a | 2 |
Consultar vários campos em busca de duplicatas
……