2010-02-02 118 views
0

我想编写一个将两个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 

这些数据库生成和下载非精明的用户,所以我想给他们一个查询来复制和粘贴。他们显然必须从一个数据库导入或链接到另一个数据库开始。

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

我当然不是在寻找一个完整的答案,只是希望得到一些建议,从哪里开始。我有一些mySQL的经验,并理解联接的基础知识。是否可以在一个查询中完成所有操作,或者我必须为每个表单独一个?

谢谢!

+0

为什么从标题中移除'SQL'?我正在寻找一个SQL查询作为答案。 – carillonator 2010-02-02 19:28:07

回答

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 
+0

美丽,谢谢。正是我所期待的。 – carillonator 2010-02-02 21:22:09

+0

该SQL假定具有相同ID的两个数据库中的记录实际上是相同的记录。如果数据库的两个副本发生分歧,则可能有重叠的ID是*不是相同的记录,因为它们是在两个副本分叉后创建的。 – 2010-02-02 22:49:15

+0

用户似乎意识到这一点,并提到需要Debbie Blue,而不是分歧的Debbie Pink记录。 – Fionnuala 2010-02-02 23:57:02

0

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

  1. 我建议在需要优先考虑的表(col1)上定义一个唯一的密钥。
  2. 然后将所有数据从数据库B复制到'主'表中。

这将失败的所有重复,但插入任何'新'记录。 如果需要,请在完成后删除唯一键约束。

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

相关问题