访问-合并两个具有相同结构的数据库


1

我想编写一个查询,将两个Access 2000数据库合并为一个查询。每个表都有35个表,这些表具有相同的字段,并且大多数都是唯一的数据。有些行将具有相同的“主键”,在这种情况下,数据库A中的行应始终优先于数据库B。我在“主键”周围使用引号,因为生成的数据库没有任何键或关系。例如:

数据库A,表1

col1    col2
Frank   red
Debbie  blue

数据库B,表1

col1    col2
Harry   orange
Debbie  pink

我想要的结果是:

col1    col2
Frank   red
Harry   orange
Debbie  blue

这些数据库是由不懂SQL的用户生成和下载的,因此,我只想给他们一个查询以进行复制和粘贴。显然,他们将必须首先从一个数据库导入或链接到另一个数据库。

我猜我将不得不用合并的结果查询制作第三个表,然后删除其他两个表。不过,理想情况下,它只是获取数据库B的表并添加数据库A的表(在必要时覆盖)。

我当然不是在寻找完整的答案,只是希望就从何处开始寻求一些建议。我有一些mySQL经验,并且了解联接的基础。是否可以在一个查询中完成所有这些操作,或者每个表都必须有一个单独的查询?

Answers:


2

我对访问不熟悉,但是在通用SQL中,我会这样做:

SELECT col1, col2 from TableA
UNION
SELECT col1, col2 from TableB where col1 not in (select col1 from TableA)

这将优先于TableA中的Debbie。基本上,您是使用UNION将整个两个表一个接一个地连接的,但是就在添加TableB之前,您要从TableA中col1中已经存在的任何内容中删除它。

编辑:我只是在谈论联接2表,而不是两个数据库。但是,只要没有冲突关系,就可以为每个表复制该想法。

EDIT2:如果您希望直接修改TableA,则可以使用INSERT(请注意,除非您在新列中添加一些额外的信息来跟踪操作,否则您不能以这种方式检索原始TableA)

INSERT INTO TableA (col1, col2) 
SELECT col1, col2 from TableB 
WHERE col1 not in (select col1 from TableA)

1

不幸的是,这不能通过单个查询来完成。

有一些很好的数据库合并工具将对您有所帮助:

  • Altova数据库间谍
  • RedGate SQL数据比较

显然,如果您打算向客户提供一些使用的商品,则许可使用商业工具会带来问题。

自己编写工具始终是一种选择,但数据库合并并非完全简单的操作。您可以在stackoverflow上查看这篇文章,其中讨论了您可能会遇到的一些问题。由于数据库未使用参照完整性检查,因此您可能会遇到更糟糕的时间。您可能还会研究ETL工具。并非专为合并方案而设计,但是您可能会找到可以完成工作的东西。


0

由于存在外键,您需要在组合表中跟踪旧的PK。在这种情况下,我总是创建一个OldID列,并将父记录附加到表中,而原始PK附加到OldID字段中。然后,我可以使用该OldID链接到子记录,并为其添加新的PK值。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.