2013-02-19 96 views
0

我有以下查詢並需要獲取MS Access中的不匹配列記錄。列比較MS Access中的SQL問題

的問題是,當有一個以上的記錄有相同的鏈接列值,匹配不正常情況發生

查詢

SELECT 
    T1Col1, 
    T1Col2, 
    T2Col1, 
    T2Col2 
FROM T1 
INNER JOIN T2 
    ON T1.Col1 = T2.Col1 
WHERE T1.Col2 <> T2.Col2 

執行我得到下面樣的結果這是不正確的後

T1Col1 T1Col2 T2Col1 T2Col2 

abc  ccc abc  eee 
abc  eee abc  ccc 

理想情況下,上面的記錄不應該返回結果集作爲那些匹配(檢查不匹配的結果集)。我是否需要更改查詢任何事情來得到正確的結果

T1

T1Col1 T1Col2 

jkl  ttt 
efg  qqq 
efg  mmm 
abc  ccc  
abc  eee  

T2

T2Col1 T2Col2 

jkl sss 
efg uuu 
efg mmm 
abc eee 
abc ccc 

預期的結果將是

T1Col1 T1Col2 T2Col1 T2Col2 

jkl  ttt jkl  sss 
efg  qqq efg  uuu 
+4

它怎麼不正確? t1.col2和t2.col2在任何一個樣本結果行中都不相等,這正是您放入SQL語句的內容。 – 2013-02-19 03:51:12

+0

Thax爲您的更新Marc。我的意思是編輯我的第一篇文章,如果你單獨檢查T1和T2數據。那些結果記錄應該匹配,這是在查詢輸出作爲不匹配 – shabar 2013-02-19 04:09:45

+1

對不起,這仍然沒有任何意義。現在你有兩個結果集 - 你不能從一個查詢中得到兩個結果。你想做什麼? 「不匹配的列記錄」是什麼意思?您能否在兩張原始表格中給出更大的數據示例,每張表格中可能有15-20行,然後是您想要返回的單個表格的示例? – Joe 2013-02-19 04:13:11

回答

0

我懷疑這是最有效的解決方案,但它會工作。

簡單連接的問題是您正在T1中執行所有記錄的笛卡爾連接,並在T2中執行所有記錄,然後刪除那些不符合標準的連接記錄。因此,您得到的結果不是您要求的,因爲您沒有進行與您的英語匹配的查詢(或您選擇的母語)。 SQL非常棒 - 大多數情況下,如果你只是大聲說出你想要的東西,那就是SQL匹配。

你想要什麼:

選擇從T1那些行那裏是在T2沒有行與COL1 COL2和同 值。然後從T2中選擇那些行,其中 在T1中沒有行,COL1和COL2的值相同。然後通過COL1匹配 這兩個結果集。

所以,在這裏你去:

create table t3 as 
    select * from 
    (select * from t1 where not exists (select 1 from T2 where T1col1=t2col1 and t1col2=t2col2)) M1, 
    (select * from t2 where not exists (select 1 from T1 where T1col1=t2col1 and t1col2=t2col2)) M2 
    where M1.t1col1=M2.t2col1; 
+0

嗨,喬,這裏Col1是兩個表中的加入密鑰。 Col2是我們應該找到的不匹配的列。 – shabar 2013-02-19 05:58:38

+1

當然,你的問題是什麼?這就是代碼所做的。 – Joe 2013-02-19 06:10:24

+0

薩克斯喬得到了重點。對不起,你乾杯乾杯 – shabar 2013-02-19 06:30:58