PDA

View Full Version : [SQL] Aiuto per query


Napalm
14-05-2005, 10:04
Dovrei effettuare una query sql di Delete che mi vada a cercare tutti i campi dupplicati di una colonna e me li elimini in modo da avere campi unici.. come se pò fare?
Grazie :)

NapalM

anonimizzato
14-05-2005, 10:21
DELETE FROM tabella WHERE campo='valore' LIMIT 1

Napalm
14-05-2005, 10:26
DELETE FROM tabella WHERE campo='valore' LIMIT 1

Però io non sò quel valore, nel senso io ho 10000 record.. devo cercare quelli dupplicati e poi eliminarli.. si può fare in una query unica?

NapalM

anonimizzato
14-05-2005, 10:43
Oddio non credo si possa fare così facilmente.

Devi sapere a priori che record vuoi cancellare in base ad un valore.

io in più passaggi farei una cosa del genere:

SELECT raggruppando i record per un certo campo (es: titolo film) scoprendo così quanti record hanno lo stesso titolo di film (duplicati da cancellare) e poi farei il DELETE su questi titoli ad un ad uno limitando ad 1 le cancellazioni (LIMIT 1).

Non conosco perfettamente l'SQL quindi magari c'è un metodo assai più veloce.

Il consiglio è di chiedere anche qui: http://forum.html.it/forum/forumdisplay.php?forumid=39

anonimizzato
14-05-2005, 11:01
altrimenti puoi fare così:

ALTER IGNORE TABLE tabella ADD UNIQUE KEY(campo);

in questo modo il DBMS aggiunge alla colonna 'campo' un indice univoco ignorando (di fatto eliminando) i valori doppi.

Spero di esserti stato utile ciao!

Napalm
14-05-2005, 11:52
Mi dà questo errore sulla query [ ALTER IGNORE TABLE NEWS ADD UNIQUE KEY(TESTO) ]


Server: messaggio 170, livello 15, stato 1, riga 1
Riga 1: sintassi non corretta in prossimità di 'IGNORE'.


Grazie x l'aiuto :)

NapalM

Mixmar
14-05-2005, 14:13
Mmmm... potresti provare ad estrarre tutti gli elementi "diversi" tra di loro, e poi fare un JOIN con la vecchia tabella, in maniera da eliminare i duplicati! Una cosa tipo (perdonate la sintassi SQL arrugginita):


SELECT * FROM
((SELECT DISTINCT (campo) FROM tabella) AS A
JOIN
tabella AS B
WHERE A.campo=B.campo)


Spero chi si capisca il ragionamento... :D

beppegrillo
14-05-2005, 14:46
Mmmm... potresti provare ad estrarre tutti gli elementi "diversi" tra di loro, e poi fare un JOIN con la vecchia tabella, in maniera da eliminare i duplicati! Una cosa tipo (perdonate la sintassi SQL arrugginita):


SELECT * FROM
((SELECT DISTINCT (campo) FROM tabella) AS A
JOIN
tabella AS B
WHERE A.campo=B.campo)


Spero chi si capisca il ragionamento... :D
Questo lo puoi fare se sono supportare le subquery :)
Che dbms usi napalm?

Napalm
14-05-2005, 15:17
SQL server 2000... grazie a tutti per il supporto :)

NapalM