sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo elimino filas duplicadas de una vista?

DISTINCT no lo ayudará si las filas tienen columnas que son diferentes. Obviamente, una de las tablas a las que se está uniendo tiene varias filas para una sola fila en otra tabla. Para recuperar una fila, debe eliminar las otras filas múltiples en la tabla a la que se está uniendo.

La forma más fácil de hacer esto es mejorar su cláusula where o la restricción JOIN para unirse solo al único registro que le gustaría. Por lo general, esto requiere determinar una regla que siempre seleccionará la entrada "correcta" de la otra tabla.

Supongamos que tiene un problema simple como este:

Person:  Jane
Pets: Cat, Dog

Si crea una combinación simple aquí, recibirá dos registros para Jane:

Jane|Cat
Jane|Dog

Esto es completamente correcto si el punto de vista es enumerar todas las combinaciones de personas y mascotas. Sin embargo, si se suponía que su vista enumeraba personas con mascotas, o enumeraba personas y mostraba una de sus mascotas, se encontró con el problema que tiene ahora. Para esto, necesitas una regla.

SELECT Person.Name, Pets.Name
FROM Person
  LEFT JOIN Pets pets1 ON pets1.PersonID = Person.ID
WHERE 0 = (SELECT COUNT(pets2.ID) 
             FROM Pets pets2
             WHERE pets2.PersonID = pets1.PersonID
                AND pets2.ID < pets1.ID);

Lo que esto hace es aplicar una regla para restringir el registro de mascotas en la unión a la mascota con la ID más baja (primero en la tabla de mascotas). La cláusula WHERE esencialmente dice "donde no hay mascotas que pertenezcan a la misma persona con un valor de ID más bajo).

Esto produciría un resultado de un registro:

Jane|Cat

La regla que deberá aplicar a su vista dependerá de los datos en las columnas que tenga y cuál de los registros "múltiples" debe mostrarse en la columna. Sin embargo, eso terminará ocultando algunos datos, que pueden no ser lo que desea. Por ejemplo, la regla anterior oculta el hecho de que Jane tiene un perro. Hace que parezca que Jane solo tiene un gato, cuando esto no es correcto.

Es posible que deba repensar el contenido de su vista y lo que está tratando de lograr con su vista, si está comenzando a filtrar datos válidos.