Come Eliminare i Record Duplicati in Oracle

4 Parti:Identificare i Record DuplicatiEliminare un Solo Record DuplicatoEliminare Record Duplicati MultipliEliminare i Record Duplicati Usando le Colonne della Tabella

Quando si lavora su un database è possibile che ci si debba scontrare con la presenza di record duplicati all'interno delle tabelle. I database Oracle permettono di individuare ed eliminare i record duplicati utilizzando il campo "RowID". Prima di apportare una modifica così radicale a una tabella, è sempre bene eseguirne il backup completo, in modo da poter risalire ai record cancellati in caso di necessità.

Parte 1
Identificare i Record Duplicati

  1. 1
    Individua tutti i record duplicati presenti nella tabella in esame. In questo articolo di esempio prenderemo in esame i record relativi al nome "Alan". Verifica la presenza effettiva di record duplicati utilizzando la query SQL mostrata alla fine di questa sezione dell'articolo.
  2. 2
    In questo esempio la colonna discriminante che permette di identificare i record duplicati è la colonna "Nome". Per questo motivo il parametro "nome_colonna" della query SQL dovrà essere sostituito con il valore "Nome".
  3. 3
    Usa altre colonne della tabella per individuare i record duplicati. Per esempio, se hai la necessità di utilizzare la colonna che contiene l'età anziché il nome, dovrai sostituire il parametro "nome_colonna" con il valore "Età" e così via, in base alla natura dei dati che devi manipolare.
    SELECT nome_colonna, COUNT(nome_colonna) 
    FROM TABLE nome_tabella
    GROUP BY nome_colonna
    HAVING COUNT (nome_colonna) > 1;
    

Parte 2
Eliminare un Solo Record Duplicato

  1. 1
    Seleziona tutti i record della tabella in esame in base alla colonna discriminante. Dopo il prompt dei comandi identificato dall'acronimo "SQL", che significa "Standard Query Language", digita la seguente query "select [nome_colonna] from [nome_tabella]".
  2. 2
    Elimina tutti i record relativi al nome duplicato di esempio. Dopo il prompt "SQL" inserisci la query "delete from names where name='Alan';". È bene precisare che in questo caso l'utilizzo delle lettere maiuscole è molto importante. La query usata in questo caso eliminerà solo i record relativi al nome "Alan". A questo punto digita il comando "commit" e premi il tasto "Invio".[1]
  3. 3
    Inserisci il record originale. Adesso che hai cancellato tutti i record relativi al nome "Alan", puoi procedere a inserirne solo uno utilizzando la seguente query "insert into name values ('Alan');". Anche in questo caso, dopo aver eseguito la query, digita il comando "commit" e premi il tasto "Invio" per creare fisicamente il nuovo record.
  4. 4
    Visualizza l'elenco dei record presenti nella tabella "name" dopo le modifiche. Dopo aver eseguito correttamente i passaggi descritti in questa sezione, controlla il contenuto della tabella in oggetto per essere sicuro che non contenga elementi duplicati. Utilizza la seguente query "select * from names".
    SQL > SELECT name FROM names;
    NAME
    ------------------------------
    Alan
    Carrie
    Tom
    Alan
    ROWS selected.
    SQL > DELETE FROM names WHERE name='Alan';
    ROWS deleted.
    SQL > COMMIT;
    COMMIT complete.
    SQL > INSERT INTO names VALUES ('Alan');
    ROW created.
    SQL > COMMIT;
    COMMIT complete.
    SQL > SELECT * FROM names;
    NAME
    ------------------------------
    Alan
    Carrie
    Tom
    ROWS selected.
    

Parte 3
Eliminare Record Duplicati Multipli

  1. 1
    In questo caso, come discriminante per individuare i record duplicati, fai riferimento alla colonna "RowID" della tabella in oggetto. Dopo il prompt "SQL", inserisci la query "select rowid, name from names;".
  2. 2
    Elimina i record duplicati. Utilizza la seguente query "delete from names a where rowid > (select min(rowid) from names b where b.name=a.name);" per individuare ed eliminare tutti i record duplicati.[2]
  3. 3
    Controlla nuovamente se sono presenti dei record duplicati all'interno della tabella in esame. Dopo aver completato correttamente i passaggi precedenti verifica se all'interno della tabella di esempio "names" sono presenti ancora dei record duplicati. Utilizza la seguente query SQL "select rowid, name from names;". Terminato il controllo, inserisci il comando "commit" e premi il tasto "Invio" per consolidare le modifiche.
    SQL > SELECT ROWID, name FROM names;
    ROWID              NAME
    ------------------ ------------------------------
    AABJnsAAGAAAdfOAAA Alan
    AABJnsAAGAAAdfOAAB Alan
    AABJnsAAGAAAdfOAAC Carrie
    AABJnsAAGAAAdfOAAD Tom
    AABJnsAAGAAAdfOAAF Alan
    ROWS selected.
    SQL > DELETE FROM names a
    WHERE ROWID > (SELECT MIN(ROWID) FROM names b
    WHERE b.name=a.name
    );
    ROWS deleted.
    SQL > SELECT ROWID, name FROM names;
    ROWID              NAME
    ------------------ ------------------------------
    AABJnsAAGAAAdfOAAA Alan
    AABJnsAAGAAAdfOAAC Carrie
    AABJnsAAGAAAdfOAAD Tom
    ROWS selected.
    SQL > COMMIT;
    COMMIT complete.
    

Parte 4
Eliminare i Record Duplicati Usando le Colonne della Tabella

  1. 1
    Visualizza l'elenco dei record presenti nella tabella "names" di esempio. Dopo il prompt "SQL", inserisci la seguente query "select * from names;". Verrà visualizzata la lista di tutti i record presenti nella tabella "names" (e delle relative colonne).
  2. 2
    Elimina i record duplicati identificandoli in base alle colonne della tabella. Inserisci la seguente query "delete from names a where rowid > (select min(rowid) from names b where b.name=a.name and b.age=a.age);" dopo il prompt "SQL" per cancellare tutti i record duplicati.[3]
  3. 3
    Controlla nuovamente se sono presenti dei record duplicati all'interno della tabella in esame. Dopo aver completato correttamente i passaggi precedenti, verifica se all'interno della tabella di esempio "names" sono presenti ancora dei record duplicati. Utilizza la seguente query SQL "select * from names;". Terminato il controllo, inserisci il comando "commit" e premi il tasto "Invio" per consolidare le modifiche.
    SQL > SELECT * FROM names;
    NAME                                  AGE
    ------------------------------ ----------
    Alan                                   50
    Carrie                                 51
    Tom                                    52
    Alan                                   50
    ROWS selected.
    SQL > DELETE FROM names a
    WHERE ROWID > (SELECT MIN(ROWID) FROM names b
    WHERE b.name=a.name
    AND b.age=a.age
    );
    ROW deleted.
    SQL > SELECT * FROM names;
    NAME                                  AGE
    ------------------------------ ----------
    Alan                                   50
    Carrie                                 51
    Tom                                    52
    ROWS selected.
    SQL > COMMIT;
    COMMIT complete.
    

Avvertenze

  • Crea un backup completo della tabella utilizzando il tuo account, in modo da poter mostrare cosa hai cancellato nel caso in cui tu debba giustificare il tuo operato. Usa questo codice SQL:
    SQL > CREATE TABLE [nome_tabella_backup] AS SELECT * FROM [nome_tabella_originale];
    TABLE created.
    

Informazioni sull'Articolo

Categorie: Programmazione

In altre lingue:

English: Delete Duplicate Records in Oracle, Español: eliminar registros duplicados en Oracle, Русский: удалять повторяющиеся записи в Oracle, Português: Excluir Registros Duplicados no Oracle, ไทย: ลบบันทึกซ้ำซ้อนใน Oracle, Deutsch: In Oracle doppelte Datensätze löschen, Bahasa Indonesia: Menghapus Duplikat Rekaman di Oracle, Tiếng Việt: Xóa dữ liệu trùng lặp trong Oracle

Questa pagina è stata letta 1 332 volte.

Hai trovato utile questo articolo?