2012-05-09 6 views
5

Esiste un modo semplice per copiare i record padre e tutti i record figlio correlati utilizzando rigorosamente SQL senza utilizzare cursori o script/codice esterni? Ecco un esempio di quello che ho:Copia genitore MySQL e tutti i record figlio correlati nel database in un nuovo ID

categories 
== 
category_id 
category_name 

parent_table 
== 
parent_record_id 
category_id 
... <other fields> 

child_table1 
== 
child_table1_id 
parent_record_id 
... <other fields> 

child_table2 
== 
child_table2_id 
parent_record_id 
... <other fields> 

Fondamentalmente, ho bisogno di fare un esatto duplicato di tutti questi dati. Gli unici campi che cambieranno sono gli ID poiché sono tutti autoincrementi. In base allo schema precedente, quando copio i record nella tabella delle categorie, finirò con tutti i nuovi valori category_id. Quando creo i duplicati dei record parent_table ho bisogno di un modo per aggiornare in qualche modo i vecchi valori category_id con i nuovi valori category_id appena creati. Dovrò quindi utilizzare i nuovi valori parent_record_id quando copi i record child_record1 e child_record2.

Mi sento come se ci fosse un modo più semplice per farlo, piuttosto che scriverlo esternamente in PHP o in un'altra lingua. È lì?

risposta

1

consulta questo articolo, http://dev.mysql.com/doc/refman/5.1/en/insert-select.html

si può sostanzialmente fare quanto segue

INSERT INTO table (id, column1, column2) (SELECT NULL, column1, column2 FROM table WHERE whatever_id = 123); 
+0

Grazie Bryan. Sono consapevole di questa sintassi. Ciò non risolve il problema che ho con la copia di altri record correlati e la traccia di/aggiornamento di tutti i nuovi ID. – ShawnCBerg