首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将两个具有唯一键的表合并到另一个表中,并在合并后将该键添加到结果表中

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

Stack Overflow用户
提问于 2011-12-30 10:45:33
回答 2查看 420关注 0票数 0

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

代码语言:javascript
复制
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中创建键)。这个是可能的吗?

EN

回答 2

Stack Overflow用户

发布于 2011-12-30 11:14:15

这个怎么样?

代码语言:javascript
复制
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   
票数 0
EN

Stack Overflow用户

发布于 2011-12-30 21:40:21

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

代码语言:javascript
复制
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

附注:我相信使用左连接的第一个解决方案会更快

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8675644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档