I lettori come te aiutano a sostenere MUO. Quando effettui un acquisto utilizzando i link sul nostro sito, potremmo guadagnare una commissione di affiliazione. Per saperne di più.

Le best practice per la progettazione di database consigliano di utilizzare il vincolo UNIQUE per evitare duplicati in un database. Tuttavia, quando si lavora con un database mal progettato o con dati non puliti, potrebbe essere necessario trovare da soli i duplicati ed eliminarli manualmente.

Continua a leggere per sapere come trovare i duplicati in un database SQL e come eliminarli.

Crea un database di esempio

A scopo dimostrativo, crea una tabella denominata Utenti con una colonna nome e punteggio eseguendo questa query SQL.

GOCCIOLARETAVOLOSEESISTEUtenti;

CREARETAVOLOUtenti (
pk_id int CHIAVE PRIMARIA,
nome VARCHAR (16),
punteggio INT,
);

Inserisci alcuni valori di esempio eseguendo questa query:

INSERIREIN
Utenti (pk_id, nome, punteggio)
VALORI
(1, 'Jane', 20),
(2, 'John', 13),
(3, "Alessio", 32),
(4, 'John', 46),
(5, 'Jane', 20),
(6, 'Maria', 34),
(7, 'Jane', 20),
(8, 'John', 13)
instagram viewer

Si noti che alcune di queste righe contengono valori duplicati per la colonna del nome.

Sentiti libero di dare un'occhiata a questi Comandi e query SQL se hai bisogno di una spiegazione più approfondita su come manipolare i database usando SQL.

Utilizzo di GROUP BY per trovare valori duplicati

Puoi utilizzare l'istruzione GROUP BY per disporre i valori che soddisfano determinate condizioni nello stesso gruppo.

Diciamo che i nomi nella tabella di esempio devono essere univoci. Puoi utilizzare GROUP BY per raggruppare le righe che condividono lo stesso nome.

SELEZIONAREnome, CONTARE(nome)
A PARTIRE DAGLI Utenti
RAGGRUPPARE PER nome
HAVING COUNT(nome) > 1

COUNT ti consente di selezionare le righe che hanno più di un utente con lo stesso nome.

Quando esegui questa query, il database restituirà righe contenenti John e Jane come duplicati.

Eliminazione di duplicati da un database

Dopo aver trovato i duplicati, potresti volerli eliminare usando l'istruzione DELETE.

Per questo esempio, esegui la seguente query:

CON cte COME (
SELEZIONARE *
ROW_NUMBER() SOPRA (
PARTIZIONE PER
nome, punteggio
ORDINATO DA
nome, punteggio
) R
DA
Utenti
)

ELIMINAREDA cte
DOVE R > 1;

Questa query utilizza un'espressione CTE per trovare i duplicati e quindi li elimina tutti tranne uno.

Perché dovresti eliminare i dati duplicati

L'eliminazione dei dati duplicati non è un must. Tuttavia, ti consente di liberare lo spazio utilizzato dalle righe duplicate.

Meno righe significano anche che le query possono essere eseguite molto più velocemente portando a prestazioni più elevate. Usa le query in questo tutorial per aiutarti a trovare e rimuovere i duplicati da un database SQL.