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


143

Quiero copiar datos de una tabla a otra 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 planeas hacerlo regularmente?
jdias

@@ jdias: hasta ahora es un trabajo único ...
Fero

@jdias Para aclarar, si no es un trabajo único, ¿qué debería hacer un novato de MySQL?
Seanny123

1
Probablemente vistas para evitar duplicar datos.
James Bradbury

Respuestas:


280

Esto hará lo que quieras:

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 instrucción WHERE al final si desea agregar solo un subconjunto de table1.

Espero que esto ayude.


Genial, me alegra ver que esto es lo mismo a lo que estoy acostumbrado en T-SQL.
jpierson

1
¡Una razón más para amar MySQL, muy intuitiva!
Peceps

Si desea copiar todos los datos de la tabla1, debe crear una nueva tabla2 antes de copiar @SANDEEP
Sachin desde Pune el

77

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

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;

Referencia para insertar selección ; Referencia para crear tabla select


2
por qué [AS]está entre corchetes, qué se hace ASaquí
Kasun Siyambalapitiya

3
Denota que la palabra es opcional. Está escrito de esa manera porque copié y pegué de los documentos; No agrega nada. Creo que ASes obligatorio en otros dialectos de SQL.
Bryan

22

Puede obtener fácilmente datos de otra tabla. Tienes que agregar campos solo lo 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 table2 a table1


11
CREATE TABLE newTable LIKE oldTable;

Luego, para copiar los datos sobre

INSERT INTO newTable SELECT * FROM oldTable;



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

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

0

Puedes 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

0

la consulta anterior solo funciona si hemos creado una tabla de clientes con columnas coincidentes del cliente

INSERT INTO clients(c_id,name,address)SELECT c_id,name,address FROM customer

0

Debería crear table2 primero.

insertar en tabla2 (campo1, campo2, ...)
seleccione field1, field2, ....
de la tabla1
donde condición;

0

SI existe la tabla. puede intentar insertar en table_name select * from old_tale;

SI la tabla no existe. deberías intentar crear una tabla nombre_tabla como old_table; insertar en table_name select * from old_tale;

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.