Come trovare ed eliminare i duplicati in SQL

Come trovare ed eliminare i duplicati in SQL

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.

DROP TABLE IF EXISTS Users;

CREATE TABLE Users (
    pk_id int PRIMARY KEY,
    name VARCHAR (16),
    score INT,
);

Inserisci alcuni valori di esempio eseguendo questa query:

INSERT INTO
    Users(pk_id, name, score)
VALUES
    (1, 'Jane', 20),
    (2, 'John', 13),
    (3, 'Alex', 32),
    (4, 'John', 46),
    (5, 'Jane', 20),
    (6, 'Mary', 34),
    (7, 'Jane', 20),
    (8, 'John', 13)

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

È possibile 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.

SELECT name, COUNT(name)
FROM Users
GROUP BY name
HAVING COUNT(name) > 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:

WITH cte AS (
    SELECT *
        ROW_NUMBER() OVER (
            PARTITION BY
                name, score
            ORDER BY
                name, score
        ) R
     FROM
        Users
)

DELETE FROM cte
WHERE 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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *