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

Come trovare righe duplicate in SQL?

Problema:

Hai righe duplicate nella tabella, con solo gli ID univoci. Come trovi quelle voci duplicate?

Esempio:

Il nostro database ha una tabella denominata product con i dati nelle seguenti colonne:id , name e category .

id categoria
1 bistecca carne
2 torta dolci
3 d>bistecca carne
4 carne di maiale carne
5 torta dolci
6 torta dolci

Troviamo nomi e categorie di prodotti duplicati. Puoi trovare i duplicati raggruppando le righe, utilizzando il COUNT funzione di aggregazione e specificando un HAVING clausola con cui filtrare le righe.

Soluzione:

SELECT  name,
 category,
FROM product
GROUP BY name, category
HAVING COUNT(id) >1;

Questa query restituisce solo record duplicati, quelli che hanno lo stesso nome di prodotto e categoria:

nome categoria
bistecca carne
torta dolci

Nella nostra tabella sono presenti due prodotti duplicati:bistecca della categoria carne e torta della categoria dolci. Il primo prodotto viene ripetuto due volte nella tabella, mentre il secondo compare tre volte.

Discussione:

Per selezionare valori duplicati, è necessario creare gruppi di righe con gli stessi valori e quindi selezionare i gruppi con conteggi maggiori di uno. Puoi ottenerlo usando GROUP BY e un HAVING clausola.

Il primo passaggio consiste nel creare gruppi di record con gli stessi valori in tutte le colonne non ID (nel nostro esempio, name e category ). Puoi farlo con un GROUP BY clausola. Dopo il GROUP BY parola chiave, inserisci i nomi delle colonne che desideri utilizzare per il raggruppamento. Escludiamo l'id colonna perché è la chiave primaria della nostra tabella; per definizione, ogni riga avrà un valore diverso sotto quella colonna. Se dovessimo includerlo, non saremmo in grado di rilevare duplicati!

Vogliamo trovare gruppi con più di una riga; tali gruppi devono contenere un duplicato per definizione, purché abbiamo raggruppato sulle colonne corrette. Per fare ciò, utilizziamo un HAVING clausola. La condizione che specifichiamo è che il numero di elementi nel gruppo—COUNT(id) —deve essere maggiore di uno:COUNT(id) > 1 . Ricorda che HAVING ti permette di filtrare i gruppi; WHERE serve per filtrare singole righe.