¿Cómo puedo fusionar dos tablas MySQL que tienen la misma estructura?¿Cómo puedo fusionar dos tablas MySQL?
Las claves primarias de las dos tablas entrarán en conflicto, así que lo tengo en cuenta.
¿Cómo puedo fusionar dos tablas MySQL que tienen la misma estructura?¿Cómo puedo fusionar dos tablas MySQL?
Las claves primarias de las dos tablas entrarán en conflicto, así que lo tengo en cuenta.
También puede probar:
INSERT IGNORE
INTO table_1
SELECT *
FROM table_2
;
que permite esas filas en table_1 para reemplazar a los de table_2 que tiene una clave primaria correspondiente, al tiempo que la inserción de nuevas filas con claves primarias.
Alternativamente,
REPLACE
INTO table_1
SELECT *
FROM table_2
;
actualizará aquellas filas que ya están en table_1 con la fila correspondiente de table_2, mientras que la inserción de nuevas filas con claves primarias.
¿Podría ser de muchas tablas? – SaidbakR
En realidad, [REPLACE] (http://code.openark.org/blog/mysql/replace-into-think-twice) filas existentes (eliminar + insertar), no actualizar. –
Si tiene que hacerlo de forma manual, una vez:
En primer lugar, se funden en una tabla temporal, con algo como:
create table MERGED as select * from table 1 UNION select * from table 2
A continuación, identificar las restricciones de clave principal con algo como
SELECT COUNT(*), PK from MERGED GROUP BY PK HAVING COUNT(*) > 1
Dónde PK es el campo de clave principal ...
Resolver el DUPL icates.
Cambie el nombre de la tabla.
[Editado - soportes de suprimir en la consulta UNION, que estaba causando el error en el comentario a continuación]
cuando intento esto, recibí este error, "ERROR 1064 (42000): Usted tiene un error en su sintaxis SQL, consulte el manual que corresponde a su versión del servidor MySQL para la sintaxis correcta para usar cerca de 'UNION select * from actor)' en la línea ", ¿por qué? – jcho360
INSERT
INTO first_table f
SELECT *
FROM second_table s
ON DUPLICATE KEY
UPDATE
s.column1 = DO_WHAT_EVER_MUST_BE_DONE_ON_KEY_CLASH(f.column1)
Gracias por la buena idea. Sin embargo, el cmd anterior me da un error de sintaxis. Pero esto funciona para mí: INSERTAR EN primera_tabla SELECT * DE second_table EN DUPLICADO KEY UPDATE second_table.column1 = DO_WHAT_EVER_MUST_BE_DONE_ON_KEY_CLASH (first_table.column1) – Tapper
Al igual que @Tapper, no pude conseguir para asignar un alias a la primera mesa. Me gustaría obtener 'Error de sintaxis, inesperado IDENT_QUOTED' - a través de MySQL Workbench de todos modos. – blo0p3r
Depende de la semántica de la clave primaria. Si es sólo AutoIncrement, a continuación, utilizar algo como:
insert into table1 (all columns except pk)
select all_columns_except_pk
from table2;
Si PK significa algo, es necesario encontrar una manera de determinar qué registro debe tener prioridad. Puede crear una consulta de selección para buscar duplicados primero (consulte answer by cpitis). Luego, elimine los que no desea conservar y utilice la inserción anterior para agregar registros que permanezcan.
Se podría escribir un script para actualizar el FK para usted .. echa un vistazo a este blog: http://multunus.com/2011/03/how-to-easily-merge-two-identical-mysql-databases/
Tienen un guión listo como para usar las tablas INFORMATION_SCHEMA para obtener las columnas "id":
SET @db:='id_new';
select @max_id:=max(AUTO_INCREMENT) from information_schema.tables;
select concat('update ',table_name,' set ', column_name,' = ',column_name,'+',@max_id,' ; ') from information_schema.columns where [email protected] and column_name like '%id' into outfile 'update_ids.sql';
use id_new
source update_ids.sql;
No es tan complicado como parece .... Simplemente deje la clave principal duplicada fuera de su consulta .... esto funciona para mí!
INSERT INTO
Content(
`status`,
content_category,
content_type,
content_id,
user_id,
title,
description,
content_file,
content_url,
tags,
create_date,
edit_date,
runs
)
SELECT `status`,
content_category,
content_type,
content_id,
user_id,
title,
description,
content_file,
content_url,
tags,
create_date,
edit_date,
runs
FROM
Content_Images
Cuando dice que las PK podrían entrar en conflicto, ¿quiere decir que puede haber filas duplicadas y no desea copiarlos, o que es necesario asignar un nuevo PK a uno de ellos, porque son filas realmente diferentes a pesar de tener el mismo PK?(otra razón más para usar claves primarias naturales) –