Esistono varie volte in cui è necessario trovare record duplicati in SQL Server. È possibile trovare duplicati usando DISTINCT, ROW NUMBER e GROUP BY approccio.
I record duplicati possono talvolta creare problemi durante la visualizzazione di report o l'esecuzione di un aggiornamento di inserimento multiplo. La ricerca di record duplicati in un database richiede ulteriori indagini. In alcuni casi, i record duplicati sono positivi, ma tutto dipende anche dai dati e dal design del database.
Ad esempio, se un cliente ha ordinato lo stesso prodotto due volte nella stessa data con lo stesso indirizzo di spedizione e fatturazione, ciò potrebbe comportare una registrazione duplicata.
Cerchiamo di creare un tavolo Cliente con i campi Nome, Cognome e Numero di cellulare.
CREATE CABLEOMER TABLE (FirstName VARCHAR (50), LastName VARCHAR (50), MobileNo VARCHAR (15)); INSERISCI I VALORI DEL CLIENTE ('Niraj', 'Yadav', 989898); INSERISCI I VALORI DEL CLIENTE ("Chetan", "Gadodia", 959595); INSERISCI I VALORI DEL CLIENTE ("Chetan", "Gadodia", 959595); INSERISCI I VALORI DEL CLIENTE ("Atul", "Kokam", 42424242); INSERISCI I VALORI DEL CLIENTE ("Atul", "Kokam", 42424242); INSERISCI I VALORI DEL CLIENTE ("Vishal", "Parte", 9394453); INSERISCI I VALORI DEL CLIENTE ("Vishal", "Parte", 9394453); INSERISCI I VALORI DEL CLIENTE ("Vishal", "Parte", 9394453); INSERISCI I VALORI DEL CLIENTE ('Jinendra', 'Jain', 121212); INSERISCI I VALORI DEL CLIENTE ('Jinendra', 'Jain', 121212); SELEZIONA * DAL CLIENTE;
Usando il DISTINCT approccio, possiamo ottenere rapidamente righe univoche in una tabella.
SELECT DISTINCT FirstName, LastName, MobileNo FROM CUSTOMER;
Tuttavia, questo non mostra quante volte una riga è stata duplicata. Utilizzando l'approccio GROUP BY, possiamo trovarlo.
Ricerca di duplicati utilizzando GROUP BY
L'aggiunta di un raggruppamento e un campo di conteggio alla nostra visualizzazione della combinazione FirstName, LastName e MobileNo mostra quante volte appare il nome di ciascun cliente.
SELECT FirstName, LastName, MobileNo, COUNT (1) come CNT FROM CUSTOMER GROUP BY FirstName, LastName, MobileNo;
GROUP BY mostrerà solo un record per ogni combinazione di FirstName, LastName e MobileNo.
Il conteggio CNT mostra quante volte la riga è stata duplicata.
CNT = 1 indica che la riga viene visualizzata solo una volta.
Cerchiamo di filtrare usando il Avere una clausola per escludere righe visualizzate solo una volta.
SELECT FirstName, LastName, MobileNo, COUNT (1) come CNT FROM CUSTOMER GROUP BY FirstName, LastName, MobileNo HAVING COUNT (1)> 1;