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:
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)
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.
In pratica sarebbe come scrivere:
codice:
UPDATE tabella SET id = (SELECT MAX(id)+1 FROM tabella as tmp) WHERE id = N
In pratica è come se duplicasse la riga togliendo però l'originale che è come dire che fa un update dell'ID della riga originale.
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:
codice:
INSERT INTO tabella (c1,c2,c3...cN) VALUES (SELECT c1,c2,c3...cN FROM tabella WHERE id=N)
Grazie mille.
Mr.Mime