Warning: count(): Parameter must be an array or an object that implements Countable in /membri/oraclefaq/qa-include/app/format.php on line 384
Eliminare valori multipli tranne uno - Oracle FAQ - Il forum italiano su oracle
0 voti
2.4k 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.4k 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


Warning: count(): Parameter must be an array or an object that implements Countable in /membri/oraclefaq/qa-include/app/format.php on line 384

Warning: count(): Parameter must be an array or an object that implements Countable in /membri/oraclefaq/qa-include/app/format.php on line 384

Warning: count(): Parameter must be an array or an object that implements Countable in /membri/oraclefaq/qa-include/app/format.php on line 384

Warning: count(): Parameter must be an array or an object that implements Countable in /membri/oraclefaq/qa-include/app/format.php on line 384

Warning: count(): Parameter must be an array or an object that implements Countable in /membri/oraclefaq/qa-include/app/format.php on line 384
0 voti
0 risposte 2.4k visite
0 voti
1 risposta 1.8k visite
0 voti
1 risposta 921 visite
quesito posto 4 Ottobre 2018 in SQL e PLSQL da avana9 (150 punti)
0 voti
1 risposta 1.6k visite
quesito posto 11 Settembre 2018 in SQL e PLSQL da niroantonio (120 punti)
0 voti
1 risposta 814 visite
quesito posto 21 Agosto 2018 in SQL e PLSQL da brunoalfonsi (120 punti)
...