如何使用MySQL将具有不同结构的2个表合并到1个表中?

时间:2014-06-02 06:15:01

标签: mysql sql

我这里有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

3 个答案:

答案 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具有相同的值。