SQL "IN" CLAUSOLA

Salve a tutti,

come posso cancellare una serie di id in una tabella conoscendo solamente quelli che non voglio cancellare?

Posso usare la clausola IN dell'SQL preceduta da una negazione?

Grazie

:bye:

inviato 10 anni fa
ulisse
X 0 X

puoi usare:

... WHERE nome_campo NOT IN (valore1, valore2, ...)

:bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Grazie Gianni, ma non posso cancellare dalla stessa tabella:

ERROR 1093 : You can't specify target table 'history' for update in FROM clause :buck:

:bye:

risposto 10 anni fa
ulisse
X 0 X

riporta la query che hai provato ad eseguire

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Delete from history where idhistory NOT IN (

SELECT

history.idhistory

FROM

history

Inner Join users ON users.idusers = history.idusers)

risposto 10 anni fa
ulisse
X 0 X

non mi avevi detto che stavi facendo un sub query...

potresti usare una tabella temporanea per appoggiare i dati della SELECT

:bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Vorrei solamente cancellare gli elementi che non trova nella lista recuperata dalla query all'interno delle parentesi :bye:

risposto 10 anni fa
ulisse
X 0 X

L'ho capito ma non puoi farlo direttamente! Devi prima salvare in una tabella gli ID che ti interessa conservare (con una prima query) e poi cancellare tutti gli altri (seconda query).

Dividendo in 2 il processo eviterai che gli ID da salvaguardare debbano essere estratti dalla stessa tabella interessata dalla DELETE.

:bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Volendo Imparare una cosa nuova:

mi sai dire come creare una tabella virtuale che conservi il risultato della prima query ?

Grazie sei senmpre molto gentile

:bye:

risposto 10 anni fa
ulisse
X 0 X

non esistono tabelle vistuali ma tabelle temporanee, che vengono distrutte alla chiusura della connessione a MySQL (quindi al termine dello script).

Queste tebelle si comportano come normali tabelle MySQL quindi per inserire record devi lanciare classiche query INSERT. Per inserire dati provenienti da un'altra tabella puoi usare la sintassi della query INSERT ... SELECT

Comunque per tutti i dettagli (che non ricordo a memoria) consulta la documentazione ufficiale di MySQL.

:bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Ma come vengono create queste tabelle temporanee?

risposto 10 anni fa
ulisse
X 0 X

nessuna voglia di consultare la documentazione? Con una normale CREATE TABLE ... che va cambiata semplicemente in una CREATE TEMPORARY TABLE ...

:bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Grazie Gianni non vorrei fare stupidaggini su un database con centinaia di migliaia di records. :bye:

risposto 10 anni fa
ulisse
X 0 X
Grazie Gianni non vorrei fare stupidaggini su un database con centinaia di migliaia di records. :bye:

:o non lavorare sull'originale!!!!!!!!

risposto 10 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda