|
Las consultas SQL de una o varias tablas eliminan registros duplicados Tabla única distinta - 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á.
|