我尝试将两个表合并在一起,并希望使用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代码吗?
答案 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。