2014-10-10 79 views
1

我怎樣才能做一個左連接上表A和B具有共同的列,但沒有A或B.左加入非主鍵

的主鍵共用列可能有一個或多個記錄兩個表。我想顯示來自表A的所有行,並從B中獲取來自A的記錄的附加數據。這可能嗎?

表A

Column1 
1123 
1123 
1123 
2234 
2234 
3344 

表B

Column1 
1123 
2234 
2234 
2234 
2234 

所需的輸出

A.Column1 B.Column1 
1123  1123 
1123  1123 
1123  1123 
2234  2234 
2234  2234 
3344  NULL 
+0

是,左連接應該工作。 select * from A left join B on A.col = B.col – radar 2014-10-10 21:18:45

+0

@Rajesh在B上留下了A上的連接,而非主鍵輸出的記錄數多於表A中的記錄。我是否使用了錯誤的連接? – user793468 2014-10-10 21:25:19

+0

你想從B中只選擇一個值嗎?你可以提供樣本數據和預期結果以便嘗試 – radar 2014-10-10 21:26:25

回答

0

你不需要具有主鍵列在JOIN(雖然,它通常由於索引而更快)。只需使用您的常用字段作爲連接標準:

SELECT a.field, b.field2 
FROM a 
LEFT JOIN b 
    ON b.common = a.common 
WHERE a.id = ??? 
0

我不確定您描述的場景有什麼特別之處。我錯過了什麼嗎?

SELECT * 
FROM TABLEA TA 
LEFT JOIN TABLEB TB ON TA.COMMONFIELD = TB.COMMONFIELD 
+0

左加入A上B非主鍵輸出更多記錄比表A中的記錄我是否使用錯誤的聯接? – user793468 2014-10-10 21:25:45

+0

沒有,如果有X上表B中連接標準表A特定匹配的記錄,您將得到表中的一行在表B中加入了與每個匹配的行如果X = 0,你只會得到的X副本對於表B字段的表A爲NULL的記錄 - 這是OUTER連接的屬性。如果使用INNER連接,那麼在該場景中將得到零行。 – pseudocoder 2014-10-10 21:32:46

+0

不知道爲什麼我得到downvoted ...選民關懷解釋? – pseudocoder 2014-12-12 14:59:33

-1
select * from A 
left outer join B on A.a = B.b 
1

按照最新的評論和期望的結果,此查詢應該工作。 由於存在重複值,因此需要從TableB中獲取不同的值。

SELECT A.COLUMN1 , B.Column1 
FROM TableA A 
LEFT JOIN (SELECT DISTINCT COLUMN1 FROM TableB) B 
on A.Column1 = B.Column1 
+0

我對TableB中的示例數據進行了更新。運行你給它在表A – user793468 2014-10-14 18:22:37

+0

,我嘗試並獲得6條共 – user793468 2014-10-14 18:25:56

+0

返回比記錄的詳細記錄@ user793468查詢後,有可能是在表A記錄更多數量的TableB中記錄過 – radar 2014-10-14 18:49:46