2011-08-04 110 views
0

我有兩個表 -左連接表中沒有重複的

T1:

col_1  col_2  col_3 
10001  apple  3 
10001  orange  2 
10001  grapes  5 

T2:

col_1  col_2  col_3  col_4 
10001  apple  3   123 
10001  orange  2   345 

什麼SQL查詢將連接這兩個表;給我這樣的結果:

col_1  col_2  col_3  col_4 
10001  apple  3   123 
10001  orange  2   345 
10001  grapes  5  
+2

我不明白。您希望的結果似乎與您的第一張表格完全相同。你的第二個表看起來是你的第一個表的簡單子集。你想達到什麼目的? – Wiseguy

+0

如果每個表的列不一樣?我已經編輯了我的問題,謝謝 –

+0

哦,我明白了。感謝您更新問題。第二個表中是否會有記錄表示_isn't_不在第一個表中?或者將所有記錄始終放在第一個表中,只有一些記錄在第二個表中? – Wiseguy

回答

1

加入表,然後使用COALESCE來獲得的第一個非空數據列

SELECT COALESCE(t1.col_1,t2.col_1) col_1, 
    COALESCE(t1.col_2,t2.col_2) col_2, 
    COALESCE(t1.col_3,t2.col_3) col_3, 
    COALESCE(t2.col_4,'') col_4, 
FROM t1 
FULL JOIN t2 ON t1 ON t1.col_1 = t2.col1 AND t1.col_2 = t2.col_2 AND t1.col_3 = t2.col_3 
+0

如果每個表的列不一樣?我已經編輯了我的問題,謝謝 –

+0

已更新我的代碼 – niktrs

0
(SELECT col_1, col_2, col_3 
FROM t1) 

UNION DISTINCT 

(SELECT col_1, col_2, col_3 
FROM t2) 
+0

Plain UNION可以返回不同的行,UNION DISTINCT對於SQL Server的語法不正確 – niktrs

+0

如果每個表的列不相同,該怎麼辦?我已經編輯了我的問題,謝謝 –

+0

第一個SELECT將爲所有列設置別名。 這意味着您可以在第二個表中使用col_4,col_5和col_6,但仍然可以將這3列作爲col_1,col_2和col_3訪問。 只記得在每個UNION SELECT中有相同數量的列。 –

0
SELECT t1.col_1, t1.col_2, t1.col3, t2.col_4 
FROM t1 
LEFT OUTER JOIN t2 ON t1.col_1 = t2.col_1 AND t1.col_2 = t2.col_2 AND t1.col_3 = t2.col_3 
+0

謝謝@niktrs有點馬虎 – idstam

+0

通過加入只col_1您的查詢將返回3x2 = 6行而不是3 – niktrs

0
SELECT t1.*, 
     col_4 
FROM t1 
     LEFT JOIN t2 using(col_2); 

如果COL_1和COL_2識別唯一條目將最後一行更改爲:

LEFT JOIN t2 using(col_1,col_2); 

如果COL_1,COL_2,col_3確定一個唯一的入口改最後一行:

LEFT JOIN t2 using(col_1,col_2,col_3);