Blocco sistema con query di eliminazione

venerdì 17 ottobre 2008 - 18.47

jampicoll Profilo | Junior Member

in pratica dovrei eliminare tutte le righe che hanno lo stesso numero di telefono.
Il database ha 220.000 righe
ho preparato questo codice per una query:

DELETE *
FROM ANAGRAFICHE
WHERE ANAGRAFICHE.[ANAGRAFICA TELEFONO] NOT IN
(
SELECT DISTINCT ANAGRAFICHE.[ANAGRAFICA TELEFONO]
FROM ANAGRAFICHE
);

Il problema è che è come se si bloccasse. Non capisco se lavora o va avanti. Capisco che sono parecchie righe ma....

C'è un codice che possa fare lo stesso risultato con un minore lavoro?

alx_81 Profilo | Guru

>in pratica dovrei eliminare tutte le righe che hanno lo stesso
>numero di telefono.
>Il database ha 220.000 righe
>ho preparato questo codice per una query:
Ciao!
Guarda che con la query che hai scritto stai cercando di "Eliminare i record della tabella *anagrafica* in cui la colonna *telefono* non è compresa tra i valori di *telefono* presi una ed una sola volta dalla stessa tabella" ovvero, non cancelli nulla.. La durata probabilmente è dovuta alla subquery, fatta su di un campo quasi sicuramente non indicizzato.

>C'è un codice che possa fare lo stesso risultato con un minore lavoro?
Devi eliminare TUTTE le righe in cui il telefono appare più di una volta con lo stesso valore?
Oppure tutte tranne UNA, che è quella che tieni? Ed in questo caso, secondo che criterio?

Comunque, per essere precisi, indicaci il DBMS che stai utilizzando, posta la CREATE della tabella e qualche insert di esempio, indicando un'anteprima di risultato che vorresti ottenere.. Giusto per capire e risolvere il tuo problema

Grazie, ciao!

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

jampicoll Profilo | Junior Member

Le devo eliminare tutte tranne una.
Che significa "non indicizzato"
Sto utilizzando MS Access 2003.

alx_81 Profilo | Guru

>Le devo eliminare tutte tranne una.
http://www.bluemoosetech.com/microsoft-access-tutorial.php?jid=25&title=Microsoft%20Access%20Remove%20Duplicate%20Records
http://www.databasejournal.com/features/msaccess/article.php/3077791

Oppure, se puoi permettertelo, fai la distinct di tutto il record (se i duplicati sono record identici) e li scrivi su di una tabella di appoggio, poi elimini o rinomini l'originale, rinominando la nuova tabella di appoggio col nome della tabella di partenza..

>Che significa "non indicizzato"
Non indicizzato significa che non c'è nessuna struttura di supporto (indice) che permetta di puntare al valore con efficienza..
Quindi il tempo si dilata visto che l'elaborazione è onerosa per cercare di ottenere la distinct di un valore salvato in maniera "disordinata" e difficilmente reperibile con prestazioni buone.




--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5