我有两个不同的excel文件,我需要在MySQL中合并到一个表中。我已经将这两个文件导出为CSV并导入到MySQL的两个不同的表中。
第一个表(Central)有:
id, name, surname, address, zip, filedA, fieldB, fieldC, fieldD
第二张表(杂志)有:
id(不同于“中央”),姓名,地址,邮编, fieldX,fieldY,fieldZ
目标是建立一个表格:
id,name,surname,address,zip,fieldA,fieldB,fieldC,fieldD, fieldX,fieldY,fieldZ
主要问题是在表“Central
”中我有几行(1000),那些是主。在表“杂志”中,我有另一组行(也是1000),但有些行存在于“中央”,有些则不存在。
我想要做的是,一个循环可以创建另一个表,或者使用“Magazine
”更新“中央”表,更新两个表中存在的行并为一个表插入新行只存在于“杂志”中。
PK不一样,但我们可以假设对名称,姓氏足以匹配两个表中的行。
由于
答案 0 :(得分: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代码。
答案 1 :(得分: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