0

我有 2 个不同的 excel 文件需要合并到 MySQL 中的一个表中。我已经将这两个文件都导出为 CSV 文件并导入到 MySQL 的 2 个不同的表中。

第一个表(中央)有:

id, name, surname, address, zip, filedA, fieldB, fieldC, fieldD

第二张表(杂志)有:

id(不同于“Central”)、姓名、姓氏、地址、邮编、fieldX、fieldY、fieldZ

目标是有一张桌子:

id、姓名、姓氏、地址、邮编、字段A、字段B、字段C、字段D、字段X、字段Y、字段Z

主要问题是在表“ Central”中我有几行(1000),这些是主控。在“杂志”表中,我有另一组行(也是 1000 行),但有些行存在于“中央”中,有些则没有。

我想要做的是一个循环,它可以或创建另一个表或用“”一个更新“中央”Magazine一个,更新两个表中存在的行并为“杂志”中仅存在的行插入新行一。

PK 不一样,但我们可以假设名称、姓氏对足以匹配两个表中的行。

谢谢

4

2 回答 2

0
create table new_table as select * from (   
 SELECT a.id, a.name, a.surname, a.address, a.zip, a.filedA, a.fieldB, a.fieldC, a.fieldD, b.fieldX, b.fieldY, b.fieldZ FROM Central a
    LEFT JOIN Magazine b ON (a.name = b.name and a.surname = b.surname)
    UNION
    SELECT b.id, b.name, b.surname, b.address, b.zip, a.filedA, a.fieldB, a.fieldC, a.fieldD, b.fieldX, b.fieldY, b.fieldZ FROM Central a
    RIGHT JOIN Magazine b ON (a.name = b.name and a.surname = b.surname) ) temp
于 2013-06-11T05:58:31.887 回答
0

在新表中,定义name, surname为唯一键,以便我们可以使用它ON DUPLICATE KEY来检测匹配项。

CREATE TABLE newtable ( /* field definitions */,
  UNIQUE INDEX (name, surname) );

然后从第一个加载数据Central

INSERT INTO newtable (id, name, surname, address, zip, fieldA, fieldB, fieldC, fieldD)
SELECT id, name, surname, address, zip, fieldA, fieldB, fieldC, fieldD
FROM Central;

现在合并来自 的数据Magazine,用新字段更新匹配的行。

INSERT INTO newtable (id, name, surname, address, zip, fieldX, fieldY, fieldZ)
SELECT id, name, surname, address, zip, fieldX, fieldY, fieldZ
FROM Magazine
ON DUPLICATE KEY UPDATE id = VALUES(id), address = VALUES(address),
                        zip = VALUES(zip), fieldX = VALUES(fieldX),
                        fieldY = VALUES(fieldY), fieldZ = VALUES(fieldZ);

可能有一种方法可以在一个中完成所有操作INSERT,但是由于 MySQL 没有,CROSS JOIN因此它将是一个 PITA 编码。

于 2013-06-11T05:47:27.850 回答