2014-09-29 85 views
0

我有這樣連接兩個表,而無需複製

表1表:

ID  NAME 
001  John 

表2:

ID  NAME   FAMILY 
001  John   Kate 
001  John   Jane 

表3:

ID  NAME   TRAINING 
001  John   ERP 
001  John   CCNA 
001  John   Java 

我想加入這些表格並顯示如下數據:

連接表:

ID  NAME   FAMILY   TRAINING 
001  John   Kate   ERP 
001  John   Jane   CCNA 
001  John       Java 

有人可以幫助我找到一個SQL語句,這樣我就可以得到這一結果?

我嘗試使用UNION這樣

SELECT table1.ID, table1.name, table2.family, null as training 
FROM table1 INNER JOIN table2 ON table1.ID = table2.ID 

UNION 

SELECT table1.ID, table1.name, null as family, table3.training 
FROM table1 INNER JOIN table2 ON table1.ID = table3.ID 

我得到結果是這樣的:

ID  NAME   FAMILY   TRAINING 
001  John   Kate   NULL 
001  John   Jane   NULL 
001  John   NULL   Java 
001  John   NULL   CCNA 
001  John   NULL   ERP 

,但是,我想有導致這樣

ID  NAME   FAMILY   TRAINING 
001  John   Kate   ERP 
001  John   Jane   CCNA 
001  John   NULL   Java 

所以,有人在這裏可以幫我解決這個問題嗎?

+2

爲什麼ID字段的值始終爲'001'?這是真的嗎?如果不是,你可以修復它 – 2014-09-29 01:07:45

+0

你使用什麼版本的火鳥? – 2014-09-29 01:14:53

+0

多數民衆贊成在這個例子中,我想顯示像這樣的用戶的數據。 我使用火鳥2.5 – 2014-09-29 02:14:55

回答

0

不要認爲這可以通用的方式完成。沒有辦法將培訓與家庭聯繫起來,2之間沒有任何聯繫。凱特與ERP無關,可以輕鬆成爲CCNA或Java。因此,你總能得到6個結果:John-Kate-3訓練,John-Jane-3訓練。 (這是正確的結果,邏輯上講) 如果你真的想要你提到的結果,我想不出爲什麼你會這樣做,你必須寫一個非泛型的查詢。這可能會沿着這樣的路線: 首先選擇約翰,凱特和一個(隨機?)訓練(前1名,或者其他,我不熟悉火鳥) 然後選擇相同的簡約 最後選擇John,NULL和剩下的訓練。

就像我說的,這是一個非泛型的查詢,你可以在where子句中使用值「Kate」和「Jane」。

如果我在哪裏,我會對整個設置以及你想要完成的事情有深入的思考。你正在嘗試使用SQL來做一些它從來沒有做的事情,事實上,這與SQL的意圖是相反的。