|
Consultas SQL single/multi-table removem registros duplicados Tabela única distinta - 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!!
|