2017-07-31 40 views
0

我有1000條記錄,一個桌子和一個有999臺的結構是這樣的....連接兩個表來獲得精確的匹配

TBL1

RecNo    ClietID   FName   LName 
1     177    bob   doe 

tbl2的

recNo2   ClientID   fName  Lname 
1     177    bob   doe 

結構非常相似,一個是所有客戶端的主表,另一個是所有DELeted客戶端的表。我試圖加入這兩個表,所以它顯示了tbl1中當前不在tbl2中的記錄....任何想法?

+0

你想找到兩個表中的記錄不在另一個表中?這些表的關鍵是什麼? clientID的? RECNO? – xQbert

+0

@xQbert是的,所以在這種情況下,請向我展示tbl1(其中有1000條記錄)的1條記錄,其中tbl2中沒有確切的客戶ID匹配(其中有999條記錄)。 – BobSki

回答

1

返回兩個表中不存在於其他表中的所有記錄。 假設clientID和recNo定義一個唯一的記錄。 使用全外與鍵上的空檢查加入應該工作

SELECT A.*, B.* 
FROM tbl1 A 
FULL OUTER JOIN tbl2 B 
on A.RecNo = b.RecNo 
and A.ClientID = B.ClientId 
WHERE (A.ClientID is null and A.RecNo is null) 
    or (B.ClientID is null and B.RecNo is null) 

如果我們知道一個事實,TAB2有較少的記錄,因此,我們要檢查的刪除存在了紀錄TAB1我們可以使用a不存在...

SELECT * 
FROM tab1 A 
WHERE NOT EXISTS (SELECT * 
        FROM tab2 B 
        WHERE A.ClientID = B.ClientID 
        and A.RecNo= B.recNO) 
+0

這樣做,謝謝 - 第二將足夠 - 我正在做一些測試 - 所以我知道tbl2比tbl1有少數記錄的事實。 – BobSki

+0

只是錯過了'tab2'的別名和'NOT EXISTS'查詢中的第二個圓括號 –

2

另一種選擇;如果你知道Tab1總是有更多的記錄比Tab2和它們的列/數據結構是相同的,並且使用的是所有列來表明其唯一,你也可以做到以下幾點:

Select * From Tab1 
Except 
Select * From Tab2 
+0

是的tbl2有更多的列但很好知道,我可以手動添加它們。欣賞它! – BobSki