簡體   English   中英

SQL Join查詢多個一對多? 或多對多?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM