Crear tablas y datos de prueba.
# 创建表
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);
Consulta de duplicados en un solo campo
Utilice la función count(), agrupe por agrupación y tenga agrupación para filtrar
select name, count(*) count
from t_duplicate
group by name
having count > 1;
group by name
:name
Agrupar según campo.count(*)
: Calcula el número de registros en cada grupo.having count > 1
: Después de agrupar, filtre los grupos cuyo número de registro sea > 1.
resultado de búsqueda:
nombre | contar |
---|---|
a | 2 |
Usando subconsultas y la función in
select *
from t_duplicate
where name in (
select name
from t_duplicate
group by name
having count(*) > 1
)
- Subconsulta: Según
name
agrupación, filtra la agrupación cuyo número de registro sea > 1, es decir, se repite la consultaname
. - Consulta externa: Úsela para
in
filtrarname
registros duplicados.
resultado de búsqueda:
nombre | edad |
---|---|
a | 1 |
a | 2 |
Utilice funciones de ventana y partición por partición
select `name`, count
from (
select name, (count(*) over (partition by name)) as count
from t_duplicate
) t
where count > 1
partition by name
:name
Dividido por campos, los mismosname
valores están en una partición.count(*) over
: Cuente el número de registros para cada partición.count > 1
: Filtrar datos con número de registro de partición > 1.
resultado de búsqueda:
nombre | contar |
---|---|
a | 2 |
a | 2 |
Consulta varios campos en busca de duplicados
……