Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 14609|Resposta: 0

[Gorjetas] SQL Como consultar uma tabela para remover duplicados

[Copiar link]
Publicado em 09/10/2014 11:03:04 | | |

Consultas SQL single/multi-table removem registros duplicados

Tabela única distinta

  1. select distinct 字段 from 表
Copiar código

Muitos votos são agrupados por

O grupo por deve ser colocado antes da ordem por e limite, caso contrário um erro será reportado

************************************************************************************

1. Encontre os registros duplicados redundantes na tabela, e os registros duplicados são avaliados com base em um único campo (peopleId).

selecione * de pessoas
onde pessoasId em (selecione pessoasId do grupo de pessoas por pessoasId, tendo contagem(pessoasId) > 1)

2. Exclua os registros duplicados redundantes na tabela, e os registros duplicados são avaliados com base em um único campo (peopleId), restando apenas os registros com o menor rowid
Excluir das pessoas
onde pessoasId em (selecione pessoasId do grupo de pessoas por pessoasId, tendo contagem(pessoasId) > 1)
e rowid not in (selecione min(rowid) do grupo de pessoas por pessoasId tendo contagem(pessoasId)>1)

3. Encontrar registros duplicados redundantes (múltiplos campos) na tabela
selecione * do vitae a
onde (a.peopleId,a.seq) em (selecione peopleId,seq do grupo vitae por peopleId,seq tendo contagem(*) > 1)

4. Exclua os registros duplicados redundantes (múltiplos campos) na tabela, restando apenas os registros com o menor rowid
Exclua do vitae a
onde (a.peopleId,a.seq) em (selecione peopleId,seq do grupo vitae por peopleId,seq tendo contagem(*) > 1)
e rowid não em (selecione min(rowid) do grupo vitae por peopleId,seq tendo contagem(*)>1)


5. Encontre registros duplicados redundantes (múltiplos campos) na tabela, e não contenham registros com o menor rowid
selecione * do vitae a
onde (a.peopleId,a.seq) em (selecione peopleId,seq do grupo vitae por peopleId,seq tendo contagem(*) > 1)
e rowid não em (selecione min(rowid) do grupo vitae por peopleId,seq tendo contagem(*)>1)

(dois)
Por exemplo
Há um campo "nome" na tabela A,
E o valor do "nome" pode ser o mesmo entre registros diferentes,
Agora você precisa consultar itens com valores duplicados de "nome" entre os registros na tabela;
Selecione Nome, Contar(*) de um Grupo Pelo Nome Tendo Contagem(*) > 1

Se o gênero também for o mesmo, é o seguinte:
Selecione Nome, sexo, Conde(*) de um grupo pelo nome, sexo tendo contagem(*) > 1

(três)
Método 1

declare @max inteiro,@id inteiro

declarar cur_rows cursor local para selecionar o campo principal, count(*) do grupo de nomes da tabela pelo campo principal tendo count(*) >; 1

aberto cur_rows

Buscar cur_rows para @id.@max

enquanto @@fetch_status=0

início

select @max = @max -1

definir a contagem de linhas @max

delete do nome da tabela onde campo primário = @id

Buscar cur_rows para @id.@max
fim

Fechar cur_rows

set rowcount 0

Método 2

"Registros duplicados" têm dois significados de registros duplicados: um é um registro completamente duplicado, ou seja, um registro com todos os campos duplicados, e o outro é um registro com partes duplicadas dos campos-chave, como o campo Nome é duplicado, enquanto outros campos não são necessariamente duplicados ou podem ser ignorados.

1. Para o primeiro tipo de repetição, é relativamente fácil de resolver e usar

select distinct * do tableName

Você pode obter o conjunto de resultados sem registros duplicados.

Se você precisar deletar registros duplicados (manter 1 registro duplicado), pode excluí-los da seguinte forma

select distinct * em #Tmp a partir do tableName

tabela drop tableName

select * em tableName de #Tmp
Tabela de #Tmp

Essa duplicação ocorre devido ao design deficiente da tabela e pode ser resolvida adicionando colunas de índice únicas.

2. Esse tipo de problema duplicado geralmente exige que o primeiro registro do registro duplicado seja mantido, e o método operacional é o seguinte

Suponha que existam campos duplicados de Nome e Endereço, e você precise obter um conjunto de resultados único para esses dois campos

select identity(int,1,1) como autoID, * para #Tmp a partir do tableName

select min(autoID) como autoID em #Tmp2 do grupo #Tmp por Nome,autoID

select * de #Tmp onde autoID em(selecione autoID de #tmp2)

A última seleção recebe o conjunto de resultados Nome e Endereço que não são repetidos (mas há um campo adicional de autoID, que pode ser escrito na cláusula select ao ser realmente escrito)

(4)
Consultas são duplicadas

selecione * do nome da tabela onde o ID está (selecione o ID do nome da tabela

Agrupar por ID

tendo contagem > 1

)

3. Encontrar registros duplicados redundantes (múltiplos campos) na tabela
selecione * do vitae a
onde (a.peopleId,a.seq) em (selecione peopleId,seq do grupo vitae por peopleId,seq tendo contagem(*) > 1)

Correr vai causar problemas, e escrever e enviar como where(a.peopleId, a.seq) não vai funcionar!!






Anterior:SQL cria procedimentos armazenados com parâmetros
Próximo:Leitor EPUBReader, indispensável para abrir arquivos EPUB
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com