Di conseguenza supponendo di avere una tabella con 3 campi (x,y,z) i
tre seguenti costrutti sql dovrebbero essere esattamente equivalenti
tra loro e fornire lo stesso risultato.
Select distinct * from Table
Select distinctrow * from Table
Select * from table group by x, y, z
Select distinct x, y, z from Table
Select distinctrow x, y, z from Table
Select x, y, z from table group by x, y, z
Sia Distinct che Group By lavorano solo sui campi specificati, ma io
avendoli scelti tutti dovrei ottenere lo stesso effetto di che ho con
distinctrow.
Giusto?
Beh io invece ottengo 2 risultati diversi (distinctrow mi dà + record
rispetto distinct o group by).
Veniamo al vero problema
Ho una tabella con 32 campi e circa 300.000 record. Dovrei capire se
tutti i record della tabella sono univoci tra loro o sono presenti dei
duplicati.
Dato che i campi sono 32 non posso usare degli indici univoci per
verificare l'univocità perchè con un indice al max posso usare 10
campi.
Allora ho pensato ad una query con distinctrow. Se la query mi dava lo
stesso numero di record della tabella allora non c'erano record
duplicati, se tale numero era minore c'erano.
Bene tale query ha risposto "no duplicati".
Per scrupolo ho provato anche una query con distict su tutti i campi e
qui ho avuto la sorpresa.
Un record in meno, quindi ci sono almeno 2 record totalmente identici
tra loro (1 duplicato).
Ho provato subito dopo a fare la query con il group by su tutti i
campi.
Stesso risultato della distinct.
Perchè allora la distinctrow dà un altro risultato ???
Per caso distinctrow è case sensitive mentre distinct e group by sono
case insensitive?
Se fosse cosi' una spiegazione ce l'avrei, perchè ci sono dei campi
che contengono una sola lettera e tale lettera puo' essere minus. o
maiuscola.
Quindi distinct trovando "A" o "a" li considera uguali e conta il
record una sola volta, mentre distinctrow li considera diversi.
Come trovo questo fantomatico duplicato (se davvero esiste)?
Grazie
Fabrizio
DISTINCTROW viene ignorato se la query include una sola tabella.
Se proprio non ci riesci potresti eseguire una autocomposizione "Ricerca
Duplicati" per ogni singolo campo
della tabella.
Ciao, Carlo
Per la ricerca duplicati ho risolto con una query del tipo:
Select a, b, c, d, e, Count(a) as Qty
from Table
Group By a, b, c, d, e
Having (Count(a)>1)
Dove a, b, c, d, ... sono tutti i campi della tabella.
Questa query ritorna tutti i record che hanno il conteggio maggiore di
1.
Il conteggio puo' essere maggiore di 1 solo se il record è presente +
volte nella Table ed è stato accorpato dalla group by.
Ciao
Fabrizio