2010-02-02 135 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.

相關問題