Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 14609|Respuesta: 0

[Consejos] SQL Cómo consultar una tabla para eliminar duplicados

[Copiar enlace]
Publicado en 9/10/2014 11:03:04 | | |

Las consultas SQL de una o varias tablas eliminan registros duplicados

Tabla única distinta

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

Muchos votos se agrupan por

El grupo de debe colocarse antes del orden por y límite, de lo contrario se reportará un error

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

1. Encontrar los registros duplicados redundantes en la tabla, y los registros duplicados se juzgan en función de un único campo (peopleId).

seleccionar * de personas
donde peopleId en (selecciona personasId de grupo de personas por personasId, teniendo conteo(personasId) > 1)

2. Elimina los registros duplicados redundantes en la tabla, y los registros duplicados se juzgan según un solo campo (peopleId), dejando solo los registros con el rowid más pequeño
eliminar de la gente
donde peopleId en (selecciona personasId de grupo de personas por personasId, teniendo conteo(personasId) > 1)
y rowid not in (selecciona min(rowid) del grupo de personas por peopleId teniendo conteo(peopleId)>1)

3. Encontrar registros duplicados redundantes (múltiples campos) en la tabla
seleccionar * del vitae a
donde (a.peopleId,a.seq) en (selecciona peopleId,seq del grupo vitae por peopleId,seq teniendo conteo(*) > 1)

4. Eliminar los registros duplicados redundantes (múltiples campos) en la tabla, dejando solo los registros con el rowid más pequeño
eliminar del vitae a
donde (a.peopleId,a.seq) en (selecciona peopleId,seq del grupo vitae por peopleId,seq teniendo conteo(*) > 1)
y rowid no en (selecciona min(rowid) del grupo vitae por peopleId,seq teniendo conteo(*)>1)


5. Encontrar registros duplicados redundantes (múltiples campos) en la tabla y no contengan registros con el menor rowid
seleccionar * del vitae a
donde (a.peopleId,a.seq) en (selecciona peopleId,seq del grupo vitae por peopleId,seq teniendo conteo(*) > 1)
y rowid no en (selecciona min(rowid) del grupo vitae por peopleId,seq teniendo conteo(*)>1)

(dos)
Por ejemplo
Hay un campo "nombre" en la tabla A,
Y el valor de "nombre" puede ser el mismo entre diferentes registros,
Ahora necesitas consultar elementos con valores duplicados de "nombre" entre registros en la tabla;
Seleccionar nombre, Count(*) de un grupo por nombre que tenga Count(*) > 1

Si el género también es el mismo, es el siguiente:
Selecciona nombre, sexo, conteo(*) de un grupo por nombre, sexo teniendo conteo(*) > 1

(tres)
Método 1

declarar @max entero, @id entero

declarar cur_rows cursor local para seleccionar el campo principal, contar(*) del grupo de nombres de la tabla por el campo principal teniendo count(*) >; 1

Abierto cur_rows

Lleva cur_rows a @id.@max

mientras que @@fetch_status=0

Comienzo

select @max = @max -1

establecer el recuento de filas @max

eliminar del nombre de la tabla donde campo principal = @id

Lleva cur_rows a @id.@max
fin

Cierre cur_rows

set número de filas 0

Método 2

"Registros duplicados" tienen dos significados de registros duplicados: uno es un registro completamente duplicado, es decir, un registro con todos los campos duplicados, y el otro es un registro con partes duplicadas de campos clave, como el campo Nombre duplicado, mientras que otros campos no necesariamente están duplicados o pueden ignorarse.

1. Para el primer tipo de repetición, es relativamente fácil de resolver y usar

select distinct * de tableName

Puedes obtener el conjunto de resultados sin registros duplicados.

Si necesitas eliminar registros duplicados (conservar 1 registro duplicado), puedes eliminarlos de la siguiente manera

select distinct * en #Tmp de tableName

tabla de desechoNombre

select * en tableName de #Tmp
Tabla de #Tmp

Esta duplicación ocurre debido a un mal diseño de tablas y puede solucionarse añadiendo columnas de índice únicas.

2. Este tipo de problema duplicado suele requerir que se mantenga el primer registro del registro duplicado, y el método de operación es el siguiente

Supongamos que hay campos duplicados de Nombre y Dirección, y necesitas obtener un conjunto de resultados único para estos dos campos

select identity(int,1,1) como autoID, * en #Tmp desde tableName

select min(autoID) como autoID en #Tmp2 de #Tmp grupo por Nombre,autoID

select * desde #Tmp donde autoID en(selecciona autoID desde #tmp2)

La última selección obtiene el conjunto de resultados Nombre y Dirección que no se repiten (pero hay un campo autoID adicional, que puede escribirse en la cláusula select al escribir realmente)

(4)
Las consultas se duplican

Selecciona * desde nombre de tabla donde está el ID (selecciona ID desde nombre de tabla

Agrupar por ID

teniendo conteo > 1

)

3. Encontrar registros duplicados redundantes (múltiples campos) en la tabla
seleccionar * del vitae a
donde (a.peopleId,a.seq) en (selecciona peopleId,seq del grupo vitae por peopleId,seq teniendo conteo(*) > 1)

Correr causará problemas, y escribir y enviar como donde (a.peopleId, a.seq) no funcionará.






Anterior:SQL crea procedimientos almacenados con parámetros
Próximo:Lector EPUBReader, imprescindible para abrir archivos EPUB
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com