将两个表合并在一起并使用SQL

时间:2016-08-15 15:31:58

标签: mysql sql merge union

我尝试将两个表合并在一起,并希望使用SQL获取单个表。我的主要问题是覆盖现有值,因为在第二个表(deltaTable)中有一些新的修订行,它们与第一个表(rootTable)中的ID相同。

示例:

1)rootTable

ID | REV | NAME
 1 |   0 | Part 1
 2 |   0 | Part 2
 3 |   0 | Part 3
 4 |   0 | Part 4
 5 |   0 | Part 5

2)deltaTable

ID | REV | NAME
 2 |   1 | Part 2
 4 |   2 | New Part 4

我希望得到以下结果:

ID | REV | NAME
 1 |   0 | Part 1
 2 |   1 | Part 2
 3 |   0 | Part 3
 4 |   2 | New Part 4
 5 |   0 | Part 5

任何人都可以帮助我或者提示如何管理SQL代码吗?

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,您可以使用UPDATE查询:

update
  rootTable r inner join deltaTable d
  on r.id = d.id
set
  r.REV = d.REV,
  r.NAME = d.NAME

请查看它有效here。 正如Hogan建议的那样,我们可以添加类似where d.rev>r.rev的东西,因为它应该有助于提供更好的表现。

如果您将ID定义为主键,则替代查询为:

insert into rootTable (ID, REV, NAME)
select * from deltaTable
on duplicate key update
  REV=values(REV), NAME=values(NAME);

(这将更新现有记录,并添加新记录)。

请看here