访问 - 合并具有相同结构的两个数据库
我想编写一个将两个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的经验,并理解联接的基础知识。是否可以在一个查询中完成所有操作,或者我必须为每个表单独一个?
谢谢!
如何:
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
美丽,谢谢。正是我所期待的。 – carillonator 2010-02-02 21:22:09
该SQL假定具有相同ID的两个数据库中的记录实际上是相同的记录。如果数据库的两个副本发生分歧,则可能有重叠的ID是*不是相同的记录,因为它们是在两个副本分叉后创建的。 – 2010-02-02 22:49:15
用户似乎意识到这一点,并提到需要Debbie Blue,而不是分歧的Debbie Pink记录。 – Fionnuala 2010-02-02 23:57:02
这不是一个SQL解决方案,但可能会告诉你的非sql精明的用户剪切和粘贴SQL语句。
- 我建议在需要优先考虑的表(col1)上定义一个唯一的密钥。
- 然后将所有数据从数据库B复制到'主'表中。
这将失败的所有重复,但插入任何'新'记录。 如果需要,请在完成后删除唯一键约束。
从您的问题看,您需要数据库B中的结果表。因此,您可能希望让用户在开始之前或完成之后将表复制到数据库B.
为什么从标题中移除'SQL'?我正在寻找一个SQL查询作为答案。 – carillonator 2010-02-02 19:28:07