MySQL/MariaDB consulta dados duplicados em determinados/múltiplos campos

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: nameAgrupar 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 nameo agrupamento, filtre o agrupamento cujo número de registro seja > 1, ou seja, a consulta é repetida name.
  • Consulta externa: use para infiltrar nameregistros 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: nameParticionado por campos, os mesmos namevalores 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

……

Acho que você gosta

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