2012-01-24 35 views
3

希望這將是一個簡單的問題!SQL Join Query multiple one-to-many?或多對多?

我有兩個表,一個'客戶'表'和一個個人'名字'表。基礎是客戶可以有一個或兩個(最大)名稱。我這樣構造它們,以便每個'名稱'可以有不同的標題。這些表格是:

clients 
+------------+-------------+------------+ 
| clientID | nameID1  | nameID2 | 
+------------+-------------+------------+ 
|   1 | 1   | 2   | 
|   2 | 3   |   | 
|   3 | 4   |   | 
+------------+-------------+------------+ 


names 
+------------+-------------+------------+------------+ 
| nameID  | surname  | initials | titleID | 
+------------+-------------+------------+------------+ 
|   1 | Banks  | P   | 1   | 
|   2 | Smith  | W   | 2   | 
|   3 | Wilson  | BT   | 2   | 
|   4 | Jefferson | JP   | 3   | 
+------------+-------------+------------+------------+ 

凡titleID從檢索...

titles 
    +------------+-------------+ 
    | titleID | titleName | 
    +------------+-------------+ 
    |   1 | Mr   | 
    |   2 | Mrs   | 
    |   3 | Miss  | 
    +------------+-------------+ 

因此,例如clientID的= 1是先生P銀行&「夫人史偉恩

的問題是我不熟悉查詢以獲得上述答案。

我不能嘗試:

SELECT 
clientID, names.surname, names.initials, titleName 
FROM clients, names, titles 
WHERE titleID = titleID AND 
NameID1 = nameID AND 
NameID2 = nameID 

如何正確地聯接表在查詢中發現,例如, clientID 1 = Mr P Banks '&' Mrs W Smith

+0

對不起,但是什麼問題? –

+0

@AndySkirrow對不起,如果不明確。我想知道如何在查詢中正確地加入表以找到例如 clientID 1 = Mr P Banks'&'Mrs W Smith – wonderswan

回答

2

你需要加入到名稱(和標題)表兩次,一次爲nameID1,一次爲nameID2。我假設客戶端必須至少有一個名稱,因此nameID1是INNER JOIN,並且由於named2是可選的(可爲空),因此它是LEFT OUTER JOIN

SELECT c.clientID, n1.surname, n1.initials, t1.titleName, n2.surname, n2.initials, t2.titleName 
FROM clients c 
INNER JOIN names n1 ON nameID1 = n1.nameID 
INNER JOIN titles t1 ON n1.titleID = t1.titleID 
LEFT OUTER JOIN names n2 ON nameID2 = n2.nameID 
INNER JOIN titles t2 ON n2.titleID = t2.titleID 
+0

這很好用。猜猜我最好看看內部連接。謝謝 – wonderswan

+0

除此之外,我可以顯示所有'客戶'嗎?目前查詢只顯示有兩個'姓名'的客戶端 – wonderswan

+0

認爲我知道了 - 我左外部加入nameID1 = n1.nameID,我也看到所有的客戶端記錄(甚至是空名稱ID2的) – wonderswan