Mysql 将具有唯一键的两个表合并到另一个表中,并在合并后将键添加到结果表中

Mysql 将具有唯一键的两个表合并到另一个表中,并在合并后将键添加到结果表中,mysql,myisam,Mysql,Myisam,我想合并两个非常大的MyISAM表(具有相同的结构)和3列上的唯一键。是否可以在不使用唯一键的情况下创建要合并的表,合并表的内容,然后在生成的表中添加唯一键,从而影响重复键更新另一个字段?总之,我有: Table 1 - Fields f1,f2,f3,f4 (Unique Key on f1,f2,f3) Table 2 - Fields f1,f2,f3,f4 (Unique Key on f1,f2,f3) Table 3 - Where Table 1 and Table 2 will

我想合并两个非常大的MyISAM表(具有相同的结构)和3列上的唯一键。是否可以在不使用唯一键的情况下创建要合并的表,合并表的内容,然后在生成的表中添加唯一键,从而影响重复键更新另一个字段?总之,我有:

Table 1 - Fields f1,f2,f3,f4 (Unique Key on f1,f2,f3)
Table 2 - Fields f1,f2,f3,f4 (Unique Key on f1,f2,f3)
Table 3 - Where Table 1 and Table 2 will be merged, 
          with fields f1,f2,f3,f4 and NO unique key.
因此,我想将表1和表2合并到表3中,只有在合并完成后,我想在重复键更新f4=f4+1…(即,所需的结果是将表1和表2中的行插入表3中(在f1、f2、f3上预先存在唯一键)在复制键时更新f4=f4+1,但仅在插入所有表1和表2行后才在表3中创建键)。这可能吗?

这个怎么样

INSERT INTO Table3
       (f1, f2, f3, f4)
SELECT  f1, f2, f3, f4
FROM Table1
UNION ALL
SELECT t2.f1, t2.f2, t2.f3, CASE t1.f1 IS NOT NULL THEN t2.f4 + 1 ELSE t2.f4 END 
FROM Table1 t1
     LEFT JOIN Table2 t2 ON t1.f1 = t2.f1 AND t1.f2 = t2.f2 AND t1.f3 = t2.f3   

第二个解决方案分两步进行

INSERT INTO Table3
       (f1, f2, f3, f4)
SELECT  f1, f2, f3, f4
FROM Table1
UNION ALL 
SELECT  f1, f2, f3, f4
FROM Table2

UPDATE Table3
SET f4 = f4 + 1
FROM Table3
     INNER JOIN 
     (SELECT f1,f2,f3, COUNT(f4) Cnt
      FROM Table3
      GROUP BY f1,f2,f3
      HAVING COUNT(f4) >= 2 ) t ON Table3.f1 = t.f1 AND Table3.f2 = t.f2
             AND Table3.f3 = t.f3

另外,我相信使用左连接的第一个解决方案速度更快

您好,谢谢您的回复!考虑到您使用的是并集和左联接,当表1和表2各有大约8000万行时,这种情况是否可以很好地扩展?谢谢我希望这是一个你必须做一次的非任务,但如果不是,我不确定什么解决方案会更快(或快多少),我将在两个步骤中发布第二个解决方案,但我会让你测试它们,并决定哪一个更快