
07/04/2008, 01:47
|
Colaborador | | Fecha de Ingreso: marzo-2008 Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 17 años Puntos: 300 | |
Re: Select entregando resultados duplicados o triplicados Imagino que tus tablas son MyISAM.
Las repeticiones parecen estar en la tabla Registro. Pues bien, como el id será siempre diferente, te bastará crear una tabla distinta con los resultados de eliminar los repetidos. Prueba con esto:
CREATE TABLE Resgistro2 AS SELECT * FROM Registro GROUP BY CONCAT(Nombre,Apellido) ORDER BY min(id)
Esto crea una tabla llamada Registro2 con los registros agrupados por la concatenación nombreapellido, y por tanto evita esas repeticiones. Conserva el id de la primera vez que lo incluiste. Mantiene todo lo demás. Hasta aquí no hay peligro.
Luego, tras revisar esa tabla Registro2 y ver que todo está bien con respecto a la tabla Registro, deberás eliminar la otra tabla, la vieja, Registro, y cambiar el nombre de la nueva, Registro2 a Registro.
Este procedimiento encierra un peligro, la eliminación de id de la tabla Registro, y por tanto, la posibilidad de que si de esos id dependen algún FK en otra tabla, estés causando un daño en la relación entre tablas. Comprueba que eso no ocurrirá, es decir, que el id de la tabla Resgistro no está guardado como FK en ninguna otra tabla.
Este sería el procedimiento si las tablas son MyIsam. Imagino que las InnoDB te impedirían hacer esos cambios si hubiera una relación establecida.
EDITO: es lógico que si dejas el distinct te salga el mismo resultado que si cambias a la colación utf8_bin en los dos campos, porque sólo encontrará uno para cada uno. De todas maneras, deberás vigilar la colación de las dos campos que se comparan, porque si en la primera has escrito también el apellido de manera diversa: Pérez, Pèrez, Perez y también en la segunda, en el caso de que la primera tenga colación utf8_bin entenderá cada apellido como uno diferente, al igual que ocurrirá en la segunda; si tú quieres que los de la primera tabla sean entendidos como iguales y también los de la segunda deberás usar colación _ci en ambas tablas y luego poner distinct en la selección de ese primer campo, pues si son tres iguales, aunque los encuentre en 9 lugares (cada uno lo encontraría en los otros 3), el distinct del primero, ya que son los tres, los nueve ahora, iguales, te dejaría sólo tres. El resultado sería el mismo. Eso creo. Estudia estas situaciones haciendo pruebas.
Última edición por jurena; 10/04/2008 a las 08:28
Razón: aclaración sobre el distinct
|