2015-01-09 169 views
-1

我試圖做兩個表之間的比較,然後返回孤立記錄。我的意思是比較CustomerA和CustomerB,排除任何匹配,並返回所有不匹配的記錄。我有以下幾點:比較兩個表並篩選結果

CustomerA | CustomerB 

在CustomerA表,我有以下欄目:

|Name  | PostCode  | 

在CustomerB表,我有以下的列:

| PostCode  | 

我想匹配CustomerA'表郵政編碼列與CustomerB表,我做了如下:

select postcode from TestDB.dbo.customerA 
except 
select postcode from TestDB.dbo.customerB 

不過,我只得到了郵政編碼作爲查詢後返回的結果沒有上面的名字:

| PostCode  | 
| A32 245  | 
| B44 345  | 
| C54 342  | 

我需要在那裏的名字爲好。例如:

|Name  | PostCode  | 
|James  | A32 245  | 
|Roger  | B44 345  | 
|Smith  | C54 342  | 

與此同時,是否可以按名稱過濾返回的結果?例如,在比較之後,我是否可以進一步鑽取並獲取名爲「James」的所有孤立記錄?

剛開始在SQL查詢中,所以會喜歡任何方向。

回答

0

您應該只比較所謂的主鍵,一個標識每個人的屬性,並且始終是唯一的。例如,它可以是DNI。是的,你可以用SELECT查詢

Select * from table where user = 'name'; 
+0

阿爾瓦羅,我知道如何查詢個人的名字,但我需要比較發生,然後返回結果與名稱和郵政編碼,然後搜索一個用戶,如詹姆斯。 –

+0

我認爲你正在尋找SQL語句Join或inner join。您可以按列/ s或其他參數組合表格以組成一個組合表格。我想那麼你可以從該表中選擇一個過濾特定名稱 –

2

我想你想全部來自CustomerA其中後置代號不CustomerB匹配的記錄篩選結果。這可能這樣做:

SELECT * 
FROM CustomerA 
WHERE PostCode NOT IN 
    (SELECT PostCode FROM CustomerB); 

得到的只是一個特定的客戶:

SELECT * 
FROM CustomerA 
WHERE PostCode NOT IN 
    (SELECT PostCode FROM CustomerB) 
AND Name = 'James'; 
+0

NOT IN有點危險,你知道人們往往會忘記的NULL事物。我的建議是使用NOT EXISTS(總是)。 – jarlh

+0

同意。不存在會在這裏更好。 – TonyJenkins

+0

如何實現NOT Exists?我還有每張表有超過3000萬條記錄,我注意到當我運行上述查詢時,執行時間超過了20分鐘的標記;正如我在不到一分鐘的時間裏所嘗試的那樣。我錯過了什麼嗎? –