2012-06-23 17 views
19

En MySQL, ¿cómo copio un CAMPO con todos los REGISTROS de TABLA1 a TABLA2 que corresponde a una clave primaria, es decir: NÚMERO DE EMPLEADO?MYSQL, Copie los campos seleccionados de una tabla a otra

+0

¿Cuáles son los campos en las tablas? ¿Qué has intentado hasta ahora? –

+0

¿Estás tratando de hacer una instrucción SELECT INTO? –

+0

datos de muestra, por favor ... –

Respuesta

33

Prueba este

INSERT INTO `table2` (`field_name2`) SELECT `field_name` FROM `table1` 
+2

esto insertará todos los datos de la tabla1 a la tabla2. –

+5

Dado que esta es la respuesta aceptada, supondré que el OP publicó la pregunta incorrecta. – swasheck

39

Si se refiere usted quiere columna actualización uno de tabla utilizando la columna de otra tabla, entonces aquí hay algunas opciones:

  1. una combinación:

    UPDATE table1 AS t1 
        INNER JOIN table2 AS t2 ON t1.EmpoyeeNo = t2.EmployeeNo 
    SET t1.SomeColumn = t2.SomeColumn 
    

    Alternativamente podría ser una combinación de la izquierda:

    UPDATE table1 AS t1 
        LEFT JOIN table2 AS t2 ON t1.EmpoyeeNo = t2.EmployeeNo 
    SET t1.SomeColumn = t2.SomeColumn 
    

    que esencialmente vacío (NULL) los valores donde se produjo ninguna coincidencia.

  2. Una subconsulta:

    UPDATE table1 
    SET SomeColumn = (
        SELECT SomeColumn 
        FROM table2 
        WHERE EmployeeNo = table1.EmployeeNo 
    ) 
    

    Esto es equivalente a la izquierda se unen en solución # 1.

Tenga en cuenta que en todos los casos se supone que una fila en table1 puede coincidir con no más de una fila en table2.

+0

Gracias, probaré esto. – ix3

+0

Con respecto a la segunda subconsulta, veo este error: 'No se puede especificar la tabla de destino 'table2' para la actualización en la cláusula FROM ¿sabes lo que podría causar esto? Thx –

+0

@SSHEsto: No, probablemente no puedas. Y no lo hice Y [mira, funciona sin problemas] (http://sqlfiddle.com/#!2/f5423/1). –

17

La consulta de los datos de copia de un cuadro a otro es:

Insert into table2 (field1, field2) select field1, field2 from table1 


Si desea copiar únicamente los valores seleccionados, a continuación, utilizar cláusula where de la consulta

Insert into table2 (field1, field2) select field1, field2 from table1 where field1=condition 


+0

Gracias por mostrar cómo mover más de uno a la vez :) – JoshP

3
update 
    table1 t1 
    join table2 t2 on t2.field = t1.field 
set 
    t1.field1 = t2.matchingfield 
where 
    t1.whatever = t2.whatever 
+0

esto acaba de resolver mi dolor de cabeza de 1 semana. Gracias amigo – bademba

+0

sí, todo el mundo dice algo diferente ... Esto funciona – brigitte18

0

Puede usar esto para copiar todos los registros del table1 en table2 con una condición.

Insert into table2 select * from table1 where field1=condition 
-3

INSERT INTO table_1 (column-1, column-2) SELECT columna-1, columna 2-DE table_2;

+1

esta pregunta ya ha recibido muchas respuestas. por favor compare su respuesta con las otras respuestas y trate de ver si la suya proporciona algo ** nuevo **. Si es así, explique por qué, porque no es obvio para mí –

Cuestiones relacionadas