![]() |
Consulta mysql DISTINCT Existe alguna funcion que me retorne un "NOT DISTINCT()" ?? O sea que me devuelva solo los registros repetidos |
hay una manera de hacer una consulta que te busque los registro duplicados la sentencia es la siguiente: Select * from tabla where campo que tiene duplicados in o en otros casos = (select campo de la condicion from misma tabla pero esta vez con un alias group by que es donde agrupas el o los campos duplicados having count(*)>1 and tabla sin el alias.campo del 2º select = tabla con el alias.mismo nombre del campo) order by campo Explicado de esta forma es complicado pero este ejemplo busca los datos duplicados de un solo campo, si lo que tienes que buscar son mas de un campo duplicado en los registro de la tabla solo tienes que agregarlo en el group by. Ten presente que no existe la condicion where en el segundo select. Espero haber servido de algo. Si no me explique bien me serviria de algo un ejemplo asi lo hacemos juntos Saludos |
uhh, si vamos al ejemplo concreto por que me re perdi La tabla "xlista_x" | id | nombre | email | El campo en donde puede haber datos repetidos es "email" |
Es: select * from xlista_x where email in (select email from xlista_x as x group by email having count(*)>1 and xlista_x.email=x.email) order by email Supomgamos que ademas del mail duplicado queres saber si tambien el nombre es asi select * from xlista_x where email in (select email from xlista_x as x group by email,nombre having count(*)>1 and xlista_x.email=x.email and xlista_x.nombre=x.nombre) order by email Es decir cuando mas campos sean los duplicados tendran que ir en el group by y en el having. Ten en cuenta que esta consulta puede demorar bastante Decime si funciono |
y no seria mas facil: SELECT id, nombre, email FROM xlista_x HAVING COUNT(email) >1 |
Es cierto pero te falto el group by y ademas creo que para este caso el tiene que ver cuales son los registro duplicado y con tu ejemplo muesta que ese registro esta duplicado. Es decir muestra uno de los dos. Saludos |
nacho9, el tuyo me hizo un loop que tube que resetear la maquina del boton. amnix el tuyo me devolvio una sola linea. Seguire investigando, gracias igual ! |
De la manera que te comente es como se hace. Te avise que tardaba mucho. Pero si puedes ver los procesos te daras cuenta que esta corriendo. |
ok efectivamente el ejemplo que puse solo muestra un registro, pense que esa era la idea, pero si queires que te devuelva todos los registros repetidos es igual solo haces en in y ocupas eso como subquery asi: SELECT * FROM xlista_x WHERE email IN (SELECT email FROM xlista_x HAVING COUNT(email) >1 ) y segun yo no es necesario el group by,pero, corrigeme nacho_99i |
Lo hare de la forma clasica, por que es para un sistema que va a funcionar en un servidor y si se traba asi con 2000 registros no me imagino con 100.000, me quedo sin servidor. Pero esta interesante para cuando necesite joder a alguien ;) |
| La zona horaria es GMT -6. Ahora son las 21:32. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.