varios unir una tablas relacionar relacionadas hacer fusionar consultas consultar consulta como codigo sql mysql merge

una - unir dos tablas sql server



¿Cómo puedo fusionar dos tablas MySQL? (6)

¿Cómo puedo fusionar dos tablas MySQL que tienen la misma estructura?

Las claves principales de las dos tablas entrarán en conflicto, así que lo tengo en cuenta.


Depende de la semántica de la clave primaria. Si solo es autoincrement, entonces usa algo como:

insert into table1 (all columns except pk) select all_columns_except_pk from table2;

Si PK significa algo, debe encontrar una forma de determinar qué registro debe tener prioridad. Puede crear una consulta de selección para buscar duplicados primero (vea la respuesta de cpitis ). Luego, elimine los que no desea conservar y utilice la inserción anterior para agregar registros que permanezcan.


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


Podrías escribir un script para actualizar los FK para ti. Mira este blog: http://multunus.com/2011/03/how-to-easily-merge-two-identical-mysql-databases/

Tienen una secuencia de comandos inteligente 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 table_schema=@db and column_name like ''%id'' into outfile ''update_ids.sql''; use id_new source update_ids.sql;


Si necesita hacerlo manualmente, una vez:

Primero, combine en una tabla temporal, con algo como:

create table MERGED as select * from table 1 UNION select * from table 2

Luego, identifique las restricciones de la clave principal con algo como

SELECT COUNT(*), PK from MERGED GROUP BY PK HAVING COUNT(*) > 1

Donde PK es el campo clave principal ...

Resuelve los duplicados.

Cambiar el nombre de la tabla.

[corregido - eliminó corchetes en la consulta UNION, que estaba causando el error en el comentario a continuación]


También puedes probar:

INSERT IGNORE INTO table_1 SELECT * FROM table_2 ;

lo que permite que esas filas en la tabla_1 reemplacen a las de la tabla_2 que tienen una clave primaria coincidente, mientras aún se insertan filas con nuevas claves primarias.

Alternativamente,

REPLACE INTO table_1 SELECT * FROM table_2 ;

actualizará las filas que ya están en la tabla_1 con la fila correspondiente de la tabla_2, mientras inserta las filas con las nuevas claves principales.


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)