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
Parte 1 di 4:

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;
    
    Pubblicità
Parte 2
Parte 2 di 4:

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.
    
    Pubblicità
Parte 3
Parte 3 di 4:

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.
    
    Pubblicità
Parte 4
Parte 4 di 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.
    
    Pubblicità

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.
    
Pubblicità

Informazioni su questo wikiHow

Lo Staff di wikiHow
Co-redatto da:
Staff di wikiHow - Redazione
Questo articolo è stato scritto in collaborazione con il nostro team di editor e ricercatori esperti che ne hanno approvato accuratezza ed esaustività.

Il Content Management Team di wikiHow controlla con cura il lavoro dello staff di redattori per assicurarsi che ogni articolo incontri i nostri standard di qualità. Questo articolo è stato visualizzato 8 033 volte
Categorie: Programmazione
Pubblicità