Salve a tutti.
Ho un quesito piuttosto classico che però non riesco a risolvere.
Ho cercato su questo stesso forum ma ho trovato solo un vecchio post di gennaio 2010 dove però si utilizzava un'altra soluzione che non posso applicare.
PROBLEMA: Devo duplicare una riga inserendola nella stessa tabella ma con CHIAVE PRIMARIA DIVERSA dove la chiave primaria è un INT Autoincrement;
SITUAZIONE: Avendo la tabella molte colonne, vorrei NON dover scrivere tutta la insert e la select mappata su tutte le singole colonne ad eccezione dell'ID.
SOLUZIONE NON FUNZIONANTE: Nella mia idea quindi ho utilizzato la classica INSERT su una SELECT e per ovviare al problema dell'ID ho usato ON DUPLICATE KEY. Ecco la query:
Il problema infatti risiede nel fatto che ON DUPLICATE KEY lavora sulla riga originale e non sul clone. Lui tenta di clonarla, vede che l'ID è uguale all'originale e la cambia con l'ID che teoricamente dovrebbe avere il clone che quindi NON viene memorizzato.codice:INSERT INTO tabella ( SELECT * FROM tabella as tab WHERE id = N) ON DUPLICATE KEY UPDATE id = (SELECT MAX(id)+1 FROM tabella as tmp)
In pratica sarebbe come scrivere:
In pratica è come se duplicasse la riga togliendo però l'originale che è come dire che fa un update dell'ID della riga originale.codice:UPDATE tabella SET id = (SELECT MAX(id)+1 FROM tabella as tmp) WHERE id = N
Quindi vorrei chiedervi come poter risolvere questo problema usando query semplici (anche più di una se serve) che non necessitino di fare una roba tipo:
Grazie mille.codice:INSERT INTO tabella (c1,c2,c3...cN) VALUES (SELECT c1,c2,c3...cN FROM tabella WHERE id=N)
Mr.Mime

Rispondi quotando