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

时间:2011-12-30 02:45:33

标签: mysql myisam

我想合并两个非常大的MyISAM表(具有相同的结构)和3列上的唯一键。是否可以创建表,它们将在没有唯一键的情况下合并,合并表的内容,然后只在结果表中添加唯一键,ON DUPLCATE KEY UPDATE的效果是另一个字段?总而言之,我有:

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中,并且只有在合并完成后,我才想在表3上添加唯一键(f1,f2,f3)ON DUPLICATE KEY UPDATE f4 = f4 + 1 ...(即所需的结果是将表1和表2中的行插入表3(在f1,f2,f3上具有预先存在的唯一键)和ON DUPLICATE KEY UPDATE f4 = f4 + 1但是创建密钥表3仅在插入所有表1和表2行之后。这可能吗?

2 个答案:

答案 0 :(得分:0)

这个怎么样?

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   

答案 1 :(得分:0)

分两个步骤的第二个解决方案

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

P.S。我相信左连接的第一个解决方案更快