Cancellare i record duplicati nelle tabelle di un database
Me lo segno sul mio blog perché è una di quelle funzioni che mi servono raramente, ma che vengono utili in certe occasioni e fanno perdere sempre quei tre minuti da utilizzare meglio, come per bersi un caffè.
Ipotizzando di avere la tabella:
| cod (chiave) | articolo | data |
| 1 | aaaa | 1/1/2000 |
| 2 | aaaa | 1/1/2000 |
| 3 | aaaa | 2/1/2000 |
| 4 | bbbb | 3/1/2000 |
| 5 | bbbb | 3/1/2000 |
Se volessi cancellare tutti i record che hanno articolo e data duplicato, posso scrivere:
delete test_cancellazione from test_cancellazione tc1 left join (select min(cod) as cod from test_cancellazione group by articolo, data ) tc2 on tc1.cod=tc2.cod where tc2.cod is null
Una volta eseguito questo codice la tabella si ridurrebbe a questi record:
| cod (chiave) | articolo | data |
| 1 | aaaa | 1/1/2000 |
| 3 | aaaa | 2/1/2000 |
| 4 | bbbb | 3/1/2000 |
Se volessi, invece, cancellare tutti i record che hanno solo il campo articolo uguale, dovrei inserire solo il nome di quel campo nel group by della query qui sopra.











