[英]SQL Join Query multiple One-to-many? or many-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 Banks先生和'W夫人史密斯
問題是我不熟悉查詢以獲得上述答案。
我不能嘗試:
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
您需要兩次加入名稱(和標題)表,一次用於nameID1,一次用於nameID2。 我假設客戶端必須至少有一個名稱,因此nameID1是INNER JOIN
,並且由於namedID2是可選的(可為空),因此它是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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.