PDA

View Full Version : [sql]rimozione record duplicati


-MiStO-
04-04-2009, 16:43
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 :)

-MiStO-
05-04-2009, 12:02
proprio nessuno? :(

Andrea16v
05-04-2009, 12:37
Vuoi rimuoverli solo se sono duplicati? Quindi processi la tabella e tutti i duplicati li cancelli?

-MiStO-
05-04-2009, 13:13
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"

-MiStO-
08-04-2009, 14:33
:mc:

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

-MiStO-
08-04-2009, 15:46
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 :)

gugoXX
08-04-2009, 16:24
Con quale motore SQL?

-MiStO-
08-04-2009, 20:14
Con quale motore SQL?
access :fagiano: ma migrazione sql server in vista :ciapet:

diciamo tenerlo il più possibile generico

gugoXX
08-04-2009, 22:50
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.

-MiStO-
09-04-2009, 07:47
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: