Retroceder   Foros del Web > Programación para sitios web > Bases de Datos > Mysql

Respuesta
 
Herramientas Desplegado
Antiguo 23-ago-2006, 14:47   #1 (permalink)
walo está en el buen camino
 
Avatar de walo
 
Fecha de Ingreso: mayo-2004
Mensajes: 304
Consulta mysql DISTINCT

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

O sea que me devuelva solo los registros repetidos
__________________
Staff Soporte
http://www.ihserver.net/
walo está desconectado   Responder Citando
Antiguo 23-ago-2006, 16:19   #2 (permalink)
nacho_99i ha deshabilitado el karma
 
Fecha de Ingreso: noviembre-2005
Mensajes: 18
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
nacho_99i está desconectado   Responder Citando
Antiguo 23-ago-2006, 18:15   #3 (permalink)
walo está en el buen camino
 
Avatar de walo
 
Fecha de Ingreso: mayo-2004
Mensajes: 304
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"
__________________
Staff Soporte
http://www.ihserver.net/
walo está desconectado   Responder Citando
Antiguo 24-ago-2006, 06:45   #4 (permalink)
nacho_99i ha deshabilitado el karma
 
Fecha de Ingreso: noviembre-2005
Mensajes: 18
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
nacho_99i está desconectado   Responder Citando
Antiguo 24-ago-2006, 07:28   #5 (permalink)
amnix ha deshabilitado el karma
 
Fecha de Ingreso: mayo-2005
Mensajes: 132
y no seria mas facil:

SELECT id, nombre, email FROM xlista_x HAVING COUNT(email) >1
amnix está desconectado   Responder Citando
Antiguo 24-ago-2006, 07:49   #6 (permalink)
nacho_99i ha deshabilitado el karma
 
Fecha de Ingreso: noviembre-2005
Mensajes: 18
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
nacho_99i está desconectado   Responder Citando
Antiguo 24-ago-2006, 09:37   #7 (permalink)
walo está en el buen camino
 
Avatar de walo
 
Fecha de Ingreso: mayo-2004
Mensajes: 304
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 !
__________________
Staff Soporte
http://www.ihserver.net/
walo está desconectado   Responder Citando
Antiguo 24-ago-2006, 13:11   #8 (permalink)
nacho_99i ha deshabilitado el karma
 
Fecha de Ingreso: noviembre-2005
Mensajes: 18
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.
nacho_99i está desconectado   Responder Citando
Antiguo 24-ago-2006, 14:03   #9 (permalink)
amnix ha deshabilitado el karma
 
Fecha de Ingreso: mayo-2005
Mensajes: 132
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
amnix está desconectado   Responder Citando
Antiguo 24-ago-2006, 16:39   #10 (permalink)
walo está en el buen camino
 
Avatar de walo
 
Fecha de Ingreso: mayo-2004
Mensajes: 304
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 ;)
__________________
Staff Soporte
http://www.ihserver.net/
walo está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 06:41.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93