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

时间:2010-02-02 18:45:41

标签: sql ms-access

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

数据库A,table1

col1    col2
Frank   red
Debbie  blue

数据库B,table1

col1    col2
Harry   orange
Debbie  pink

我想要的结果:

col1    col2
Frank   red
Harry   orange
Debbie  blue

这些数据库是由非sql-savvy用户生成和下载的,所以我想给他们一个复制和粘贴的查询。他们显然必须先将一个DB [in]导入或链接到另一个DB。

我猜我必须使用组合结果查询创建第三个表,然后删除其他两个。但理想情况下,它只会将数据库A的行添加到数据库B中(在必要时覆盖)。

我当然不是在寻找一个完整的答案,只是希望能从哪里开始。我有一些mySQL经验,并了解连接的基础知识。是否可以在一个查询中完成所有操作,或者我是否必须为每个表分别设置一个?

谢谢!

2 个答案:

答案 0 :(得分:1)

怎么样:

SELECT t.ID, t.Field1, t.Field2 INTO NewTable FROM
(SELECT a.ID, a.Field1, a.Field2
FROM Table1 A
UNION
SELECT x.ID, x.Field1, x.Field2
FROM Table1 x IN 'C:\docs\db2.mdb'
WHERE x.ID NOT IN (SELECT ID From Table1)) t

答案 1 :(得分:0)

这不是一个SQL解决方案,但可能会告诉非精通SQL用户剪切和粘贴SQL语句。

  1. 我建议在桌子上定义一个优先级(col1)的唯一Key。
  2. 然后将数据库B中的所有数据复制到“主”表中。
  3. 对于所有重复项都将失败,但插入任何“新”记录。 完成后,在必要时删除唯一键约束。

    从您的问题看来,您需要在数据库B中生成结果表。因此,您可能希望让您的用户在开始之前或完成之后将表复制到数据库B中。

相关问题