0 voti
43 visite
quesito posto in SQL e PLSQL da (120 punti)
Ciao a tutti,

Ho una tabella contenente molti valori, alcuni per errore sono stati duplicati.

La mia domanda è: come posso eliminare questi valori multipli,  lasciandone solamente uno?

1 Risposta

0 voti
risposta inviata da (2.1k punti)

Se non hai altri criteri per scegliere quali righe conservare e quali conservare un approccio veloce potrebbe essere questo (da non applicare in ambienti di produzione):

STEP 1: creo tabella temporanea con i valori distinti

CREATE TABLE NOME_TABELLA_TEMPORANEA AS

SELECT DISTINCT campo1, campo2, campo3, ecc... FROM TABELLA_ORIGINALE;

STEP 2: droppo la tabella originale

DROP TABLE TABELLA_ORIGINALE;

STEP 3: rinomino la tabella temporanea

RENAME TABLE NOME_TABELLA_TEMPORANEA TO TABELLA_ORIGINALE;

L'altro approccio sicuramente meno impattante in caso di ambienti di produzione è quello di fare tutto in unica DELETE (attenzione se devi cancellare milioni di righe, potresti intasare il tablespace UNDO), per buttare giù lo statement però servirebbe sapere meglio come è strutturata la tua tabella, ti faccio un esempio che suppone che la tabella abbia una chiave primaria (in alternativa puoi provare con il ROWID) differente dal campo che ritieni "duplicato":

DELETE NOME_TABELLA a WHERE a.id != (select MIN(b.id) FROM NOME_TABELLA b WHERE a.valore = b.valore);

Domande correlate

0 voti
0 risposte 1.2k visite
0 voti
1 risposta 16 visite
quesito posto 11 Settembre in SQL e PLSQL da niroantonio (120 punti)
0 voti
1 risposta 18 visite
quesito posto 21 Agosto in SQL e PLSQL da brunoalfonsi (120 punti)
0 voti
1 risposta 91 visite
0 voti
1 risposta 125 visite
quesito posto 4 Dicembre 2017 in SQL e PLSQL da stellare21 (150 punti)
...