2014-05-16 48 views
1

我有兩個包含名稱和與這些名稱對應的幾組不同的ID號的表。
表1中的列有:名稱,ID1,ID2 表2中的列有:名稱,ID1,ID3使用JOIN - 訪問SQL

我想有名稱,ID1,ID2和ID3

我用左連接表從Table1中獲取Name,ID1,ID2並從Table2中獲取ID3,並且我使用右連接從Table2中獲取剩餘的ID3值,以及相應的Name和ID1。這裏是什麼樣子:

SELECT [Table1].Name, [Table1].ID1, [Table1].ID2, [Table2].ID3 
FROM [Table1] LEFT JOIN [Table2] ON [Table1].ID1 = [Table2].ID1 
UNION 
SELECT [Table2].Name, [Table2].ID1, [Table1].ID2, [Table2].ID3 
FROM [Table1] RIGHT JOIN [Table2] ON [Table1].ID1 = [Table2].ID1; 

的問題是,有兩個表之間的名稱一些格式差異(例如ID1 = 1將名稱中的表1「內華達大學」和內華達州的「U. 「在表2中),所以我結束重複值。有沒有辦法擺脫重複,或改變查詢,以便我不把它們放在第一位?

感謝

+0

您將首先必須決定在重複的情況下您偏好哪個值,是否要保留table1或table2的名稱? – Yoh

回答

0

如果添加行的您查詢的第二部分,它只會選擇從表2中沒有的表1中的記錄,從而避免重複:(在這種情況下,重複,名字從表1將在您的結果)

SELECT [Table1].Name, [Table1].ID1, [Table1].ID2, [Table2].ID3 
FROM [Table1] LEFT JOIN [Table2] ON [Table1].ID1 = [Table2].ID1 
UNION 
SELECT [Table2].Name, [Table2].ID1, [Table1].ID2, [Table2].ID3 
FROM [Table1] RIGHT JOIN [Table2] ON [Table1].ID1 = [Table2].ID1 
WHERE [Table1].ID1 is null ; 

我不知道你是多麼的愜意與查詢和了解他們,所以以防萬一,目前還不清楚,我就趕緊解釋。不同之處在於你的聯合查詢的第二部分是從Table1中選擇與匹配的ID2整個Table2。 (所以圖片中的整個綠色圓圈。)因此,通過添加行WHERE [Table1].ID1 is null,我們實際上說只挑選Table2的那些記錄,其中Table1沒有匹配的ID1值。 (所以我們排除重疊部分,用紅色標記部分。) enter image description here

+0

太好了,謝謝!我有一個模糊的想法,我只想看看空值,但我不知道該怎麼做。 – user3645621