2011-09-20 26 views
99

Quiero copiar datos de una tabla a otra en MySQL.¿Cómo copiar datos de una tabla a otra tabla nueva en MySQL?

Tabla 1 (tabla existente):

aid  
st_id 
from_uid 
to_gid 
to_uid 
created 
changed 
subject 
message 
link 

Tabla 2 (Nueva tabla)

st_id 
uid 
changed 
status 
assign_status 

quiero copiar algunos campos de datos de la Tabla 1 en la tabla 2.

¿Se puede hacer esto usando consultas MySQL?

+1

¿Es este un trabajo de una sola vez o planea hacerlo regularmente? – jdias

+0

@@ jdias: hasta ahora es un trabajo de una sola vez .. – Fero

+0

@jdias Para aclarar, si no es un trabajo de una sola vez, ¿qué debería considerar un novato de MySQL en su lugar? – Seanny123

Respuesta

187

Esto va a hacer lo que quiere:

INSERT INTO table2 (st_id,uid,changed,status,assign_status) 
SELECT st_id,from_uid,now(),'Pending','Assigned' 
FROM table1 

Si desea incluir todas las filas de la Tabla 1. De lo contrario, puede agregar una declaración WHERE hasta el final si desea agregar solo un subconjunto de tabla1.

Espero que esto ayude.

+0

no funciona ... – SANDEEP

+0

Genial, me alegra ver que esto es igual a lo que he estado acostumbrado en T-SQL. – jpierson

+0

¡Una razón más para amar a MySQL, muy intuitivo! – peceps

2
SELECT * 
INTO newtable [IN externaldb] 
FROM table1; 

http://www.w3schools.com/sql/sql_select_into.asp

+0

No funciona. Por [los documentos] (http://dev.mysql.com/doc/refman/5.0/en/ansi-diff-select-into-table.html), "MySQL Server no es compatible con SELECT ... INTO TABLE Extensión de SQL de Sybase " – Bryan

18

Puede obtener fácilmente datos de otra tabla. Tienes que agregar los campos solo que quieras.

La consulta MySQL es:

INSERT INTO table_name1(fields you want) 
    SELECT fields you want FROM table_name2 


donde, los valores se copian de tabla2 a tabla1

49

Si no desea enumerar los campos, y la estructura de las tablas es el misma, que puede hacer:

INSERT INTO `table2` SELECT * FROM `table1`; 

o si desea crear una nueva tabla con la misma estructura:

CREATE TABLE new_tbl [AS] SELECT * FROM orig_tbl; 

Reference for insert select; Reference for create table select

+1

por qué '[AS]' está entre corchetes, lo que hace 'AS' aquí –

+1

Indica que la palabra es opcional. Está escrito de esa manera porque copié y pegué de los documentos; no agrega nada Creo que el 'AS' es obligatorio en otros dialectos de SQL. – Bryan

2
INSERT INTO Table1(Column1,Column2..) SELECT Column1,Column2.. FROM Table2 [WHERE <condition>] 
+1

Si bien este código puede responder la pregunta, sería mejor explicar cómo se resuelve el problema y por qué usarlo. Las respuestas de solo código no son útiles a largo plazo. –

0

la consulta anterior sólo funciona si hemos creado la tabla clientes con columnas coincidentes de que el cliente

INSERT INTO clients(c_id,name,address)SELECT c_id,name,address FROM customer 
3
CREATE TABLE newTable LIKE oldTable; 

Entonces, para copiar los datos a través de

INSERT INTO newTable SELECT * FROM oldTable; 
0

Puede probar este código

insert into #temp 
select Product_ID,Max(Grand_Total) AS 'Sales_Amt', Max(Rec_Amount) ,'','' 
from Table_Name group by Id 
Cuestiones relacionadas