我想合并两个非常大的MyISAM表(具有相同的结构)和3列上的唯一键。是否可以在没有唯一键的情况下创建要合并的表,合并表的内容,然后才在结果表中添加唯一键,从而影响到DUPLCATE键更新另一个字段?所以,总结一下,我有:
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),然后在重复键更新f4=f4+1 ...(即,所需的结果是表1和表2中的INSERTing行到表3中(在f1,f2,f3上有一个预先存在的唯一键)和在重复键更新f4=f4+1上创建键,但是只有在插入了所有表1和表2行之后才在表3中创建键)。这个是可能的吗?
发布于 2011-12-30 11:14:15
这个怎么样?
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 发布于 2011-12-30 21:40:21
两个步骤的第二个解决方案
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附注:我相信使用左连接的第一个解决方案会更快
https://stackoverflow.com/questions/8675644
复制相似问题