我想合并两个非常大的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行之后。这可能吗?
答案 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。我相信左连接的第一个解决方案更快