Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come rimuovo le righe duplicate da una vista?

DISTINCT non ti aiuterà se le righe hanno colonne diverse. Ovviamente, una delle tabelle a cui ti stai unendo ha più righe per una singola riga in un'altra tabella. Per recuperare una riga, devi eliminare le altre righe multiple nella tabella a cui ti stai unendo.

Il modo più semplice per farlo è migliorare la tua clausola where o la restrizione JOIN per unirti solo al singolo record che desideri. Di solito questo richiede la determinazione di una regola che selezionerà sempre la voce 'corretta' dall'altra tabella.

Supponiamo che tu abbia un problema semplice come questo:

Person:  Jane
Pets: Cat, Dog

Se crei un semplice join qui, riceverai due record per Jane:

Jane|Cat
Jane|Dog

Questo è completamente corretto se il tuo punto di vista è elencare tutte le combinazioni di persone e animali domestici. Tuttavia, se la tua visualizzazione doveva invece elencare le persone con animali domestici o elencare persone e mostrare uno dei loro animali domestici, hai riscontrato il problema che hai ora. Per questo, hai bisogno di una regola.

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);

Ciò che fa è applicare una regola per limitare il record Pets nel join al Pet con l'ID più basso (il primo nella tabella Pets). La clausola WHERE dice essenzialmente "dove non ci sono animali domestici appartenenti alla stessa persona con un valore ID inferiore).

Ciò produrrebbe un risultato record:

Jane|Cat

La regola che dovrai applicare alla tua vista dipenderà dai dati nelle colonne che hai e quale dei record "multipli" dovrebbe essere visualizzato nella colonna. Tuttavia, ciò finirà per nascondere alcuni dati, che potrebbero non essere quelli che desideri. Ad esempio, la regola di cui sopra nasconde il fatto che Jane ha un cane. Sembra che Jane abbia solo un gatto, quando questo non è corretto.

Potrebbe essere necessario ripensare ai contenuti della tua vista e a cosa stai cercando di ottenere con la tua vista, se stai iniziando a filtrare i dati validi.