Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Mysql (http://www.forosdelweb.com/f86/)
-   -   Consulta mysql DISTINCT (http://www.forosdelweb.com/f86/consulta-mysql-distinct-419636/)

walo 23/08/2006 14:47

Consulta mysql DISTINCT
 
Existe alguna funcion que me retorne un "NOT DISTINCT()" ??

O sea que me devuelva solo los registros repetidos

nacho_99i 23/08/2006 16:19

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

walo 23/08/2006 18:15

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"

nacho_99i 24/08/2006 06:45

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

amnix 24/08/2006 07:28

y no seria mas facil:

SELECT id, nombre, email FROM xlista_x HAVING COUNT(email) >1

nacho_99i 24/08/2006 07:49

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

walo 24/08/2006 09:37

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 !

nacho_99i 24/08/2006 13:11

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.

amnix 24/08/2006 14:03

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

walo 24/08/2006 16:39

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.