2013-05-08 83 views
0

我在2個不同的數據庫中有2個表。列的名稱和一切匹配。我如何運行查詢來查看兩個表中的數據是完全相同的。我需要檢查每一行。比較2個相同的數據差異表

+0

將數據表導出爲文件,然後使用白色腳本進行比較。 – Kasyx 2013-05-08 10:33:58

回答

1

如果您只需要對整個數據集做出肯定/否定的答案,並且表中至少有一個鍵,則使用所有列執行內部聯接,並驗證返回的行數是否等於每個表中的行。

select 
    count(*) 
from 
    a 
    inner join b 
on 
    a.c1 = b.c1 and 
    a.c2 = b.c2 and 
    a.c3 = b.c3 

如果需要從每個表中,作爲歸一化的結果不同的特定的行,則需要從每個表中的多個(至少2)選擇,一個以檢索獨特的(非相交)的行。因爲這些表格是相同的模式,所以可以很好地合併這些表格,並將源表格列投影到結果中,以指示每行的起始位置。

如果您需要通過鍵關聯導致的差異(如在編輯之前/之後查找,包括行內容更改,行添加和行刪除),並且您的DBMS支持完整外連接,則可以執行完整外鍵連接,只返回不是所有列都相等的結果。請注意,假設這些密鑰在刪除後不會重複使用。

SELECT * 
FROM a 
FULL OUTER JOIN b 
ON a.PK = b.PK 
WHERE 
    a.c1 <> b.c1 OR 
    a.c2 <> b.c2 OR 
    a.c3 <> b.c3 

注意上面的例子中還假設兩個空值比較相等的,如可與MS SQL經由「SET ANSI NULLS OFF」來完成。用這種方式來表達就更快了。