我这里有2张表需要合并。
表1 PK1 appt_id other_fields_here
表2 PK2 appt_id other_fields_here(大多数名称不同,但有一些名称来自table1)
该表将使用appt_id作为匹配键进行合并。任何没有匹配的记录都会被转移到新表中。
请参阅下面的示例,以便更好地了解我想要完成的任务。
非常感谢。
示例:每个表中只有2条记录。合并后新表将有3条记录。
scenario1 :匹配appt_id(这会在新表上创建一条记录。)
table1: pk1=1 | appt_id=1 | field1=test1
table2: pk2=1 | appy_id=1 | field2=test1
new pk = autoincrement | appt=1 | field1=test1 | field2=test1
scenario2 :appt_id没有匹配的记录(这将在新表中创建2条新记录)
table1: pk1=293454 | appt_id=34535 | field1=test34535
table2: pk2=735353 | appt_id=88888 | field2=test88888
new pk = autoincrement | appt=34535 | field1=test34535 | field2=null
new pk = autoincrement | appt=88888 | field1=null | field2=test88888
答案 0 :(得分:2)
使用join和UNION。请检查此demo
SELECT t.appt_id,t.field1,t2.field2 FROM table1 t LEFT JOIN table2 t2 ON t.appt_id = t2.appt_id
UNION
SELECT t2.appt_id,t.field1,t2.field2 FROM table2 t2 LEFT JOIN table1 t ON t.appt_id = t2.appt_id
答案 1 :(得分:0)
此事称为FULL OUTER JOIN
不幸的是,MySQL不支持这种连接。
您可以使用以下查询来实现模拟结果:
SELECT
* -- list required fields here!
FROM
table1 T1
LEFT JOIN table2 T2
ON T1.appt_id
UNION
SELECT
* -- list required fields here!
FROM
table1 T1
RIGHT JOIN table2 T2
ON T1.appt_id
答案 2 :(得分:0)
insert into new_table(appt_id, field) select appt_id, field1 from table1 union select appt_id, field2 from table2;
union将只从两个表中获取唯一记录。如果您需要所有记录,请使用union all
。
我假设当appt_id相同时,field1和field2具有相同的值。