una tablas tabla registros otra datos copiar sql mysql

registros - copiar tablas mysql workbench



MySQL: ¿Cómo copiar filas, pero cambiar algunos campos? (6)

Tengo una gran cantidad de filas que me gustaría copiar, pero necesito cambiar un campo.

Puedo seleccionar las filas que quiero copiar:

select * from Table where Event_ID = "120"

Ahora quiero copiar todas esas filas y crear nuevas filas mientras configuro Event_ID en 155 . ¿Cómo puedo lograr esto?


Digamos que su tabla tiene otras dos columnas: foo y bar

INSERT INTO Table (foo, bar, Event_ID) SELECT foo, bar, "155" FROM Table WHERE Event_ID = "120"


Esta es una solución donde tienes muchos campos en tu mesa y no quieres que te toque un dedo escribir todos los campos, solo escribe los que necesites :)

Cómo copiar algunas filas en la misma tabla, con algunos campos que tienen valores diferentes:

  1. Crea una tabla temporal con todas las filas que quieras copiar
  2. Actualice todas las filas en la tabla temporal con los valores que desee
  3. Si tiene un campo de incremento automático, debe establecerlo en NULL en la tabla temporal
  4. Copie todas las filas de la tabla temporal en su tabla original
  5. Eliminar la tabla temporal

Tu codigo:

CREATE table temporary_table AS SELECT * FROM original_table WHERE Event_ID="155"; UPDATE temporary_table SET Event_ID="120"; UPDATE temporary_table SET ID=NULL INSERT INTO original_table SELECT * FROM temporary_table; DROP TABLE temporary_table

Código de escenario general:

CREATE table temporary_table AS SELECT * FROM original_table WHERE <conditions>; UPDATE temporary_table SET <fieldx>=<valuex>, <fieldy>=<valuey>, ...; UPDATE temporary_table SET <auto_inc_field>=NULL; INSERT INTO original_table SELECT * FROM temporary_table; DROP TABLE temporary_table

Código simplificado / condensado:

CREATE TEMPORARY TABLE temporary_table AS SELECT * FROM original_table WHERE <conditions>; UPDATE temporary_table SET <auto_inc_field>=NULL, <fieldx>=<valuex>, <fieldy>=<valuey>, ...; INSERT INTO original_table SELECT * FROM temporary_table;

Como la creación de la tabla temporal usa la palabra clave TEMPORARY , se eliminará automáticamente cuando finalice la sesión (como se sugirió @ ar34z).


Oye, ¿qué tal copiar todos los campos, cambiar uno de ellos al mismo valor + algo más?

INSERT INTO Table (foo, bar, Event_ID) SELECT foo, bar, Event_ID+"155" FROM Table WHERE Event_ID = "120"

??????????


Si tiene muchas columnas en su tabla y no desea escribirlas, puede hacerlo usando una tabla temporal, como;

SELECT * INTO #Temp FROM Table WHERE Event_ID = "120" GO UPDATE #TEMP SET Column = "Changed" GO INSERT INTO Table SELECT * FROM #Temp


Siempre que Event_ID sea Integer, haga esto:

INSERT INTO Table (foo, bar, Event_ID) SELECT foo, bar, (Event_ID + 155) FROM Table WHERE Event_ID = "120"


INSERT INTO Table ( Event_ID , col2 ... ) SELECT "155" , col2 ... FROM Table WHERE Event_ID = "120"

Aquí, col2, ... representa las columnas restantes (las que no sean Event_ID) en su tabla.