View Full Version : [sql]rimozione record duplicati
ciao a tutti
come faccio a rimuovere dei record duplicati da una tabella?
per esempio ho 3 colonne key1 key2 valore
A B x1
B A x1
C D x2
devo rimuovere indifferentemente il primo o il secondo record
so di averlo visto / fatto da qualche parte tramite opportune join e select ma al momento ho un clamoroso vuoto di memoria :doh:
grazie dell'aiuto :)
Andrea16v
05-04-2009, 12:37
Vuoi rimuoverli solo se sono duplicati? Quindi processi la tabella e tutti i duplicati li cancelli?
Vuoi rimuoverli solo se sono duplicati? Quindi processi la tabella e tutti i duplicati li cancelli?
sisi solo se duplicati: come nel esempio se mi trovo
a b x1
b a x1
per me sono lo stesso record, quindi uno va eliminato
d'altra parte se avessi anche a b x2, questo non adrebbe eliminato(poichè il valore x2 è diverso da x1)
diciamo che vorrei avere come chiave la tripla key1 key2 val "non ordinata"
Fabio7586
08-04-2009, 15:35
sisi solo se duplicati: come nel esempio se mi trovo
a b x1
b a x1
per me sono lo stesso record, quindi uno va eliminato
d'altra parte se avessi anche a b x2, questo non adrebbe eliminato(poichè il valore x2 è diverso da x1)
diciamo che vorrei avere come chiave la tripla key1 key2 val "non ordinata"
Pseudo Codice
Select campo1,campo2,campo3 from tabella
\\ciclo
if campo1=var1 and campo2=var2 and campo3=var3
delete campo1,campo2,campo3 from [tabella]
var1=campo1
var2=campo2
var3=campo3
\\fine ciclo
Pseudo Codice
Select campo1,campo2,campo3 from tabella
\\ciclo
if campo1=var1 and campo2=var2 and campo3=var3
delete campo1,campo2,campo3 from [tabella]
var1=campo1
var2=campo2
var3=campo3
\\fine ciclo
da codice è abbastanza semplice in effetti, volevo farlo se possibile tramite sql(concatenazione di join e viste varie) per cercare di avere la fase di visualizzazione dei dati il + pulita possibile :)
grazie comunque :)
Con quale motore SQL?
access :fagiano: ma migrazione sql server in vista :ciapet:
diciamo tenerlo il più possibile generico
Questa dovrebbe andare su tutti i motori seri, non saprei access che ha una sintassi tutta sua. Testala
DELETE FROM tabella
WHERE EXISTS (
SELECT 1 FROM tabella intab
WHERE intab.key1=tabella.key2
AND intab.key2=tabella.key1
AND intab.value=tabella.value
AND tabella.key1>intab.key1
)
Non dovrebbe pero' riuscire a rimuovere i duplicati esattamente identici
ovvero quando ci sono due o piu' record con esattamente gli stessi 3 valori nello stesso ordine.
Questa dovrebbe andare su tutti i motori seri, non saprei access che ha una sintassi tutta sua. Testala
DELETE FROM tabella
WHERE EXISTS (
SELECT 1 FROM tabella intab
WHERE intab.key1=tabella.key2
AND intab.key2=tabella.key1
AND intab.value=tabella.value
AND tabella.key1>intab.key1
)
Non dovrebbe pero' riuscire a rimuovere i duplicati esattamente identici
ovvero quando ci sono due o piu' record con esattamente gli stessi 3 valori nello stesso ordine.
infinite grazie, stasera la testo :)
ps: mi ero fissato a pensarla con join, magari il mio problema era quello :stordita:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.