MySQL/MariaDB consulta datos duplicados en determinados/múltiples campos

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: nameAgrupar 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 nameagrupación, filtra la agrupación cuyo número de registro sea > 1, es decir, se repite la consulta name.
  • Consulta externa: Úsela para infiltrar nameregistros 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: nameDividido por campos, los mismos namevalores 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

……

Supongo que te gusta

Origin blog.csdn.net/duanluan/article/details/132730114
Recomendado
Clasificación