2017-06-29 47 views
2

我dbo.Users表獲取多個表的結果

Id, Name 
1, John 
2, Mary 
3, Michael 

然後,我有dbo.Phones表

Id, Phonenumber 
10, 1234 
11, 5555 

然後,我有dbo.Relationship表

Id, ChildId 
1, 10 
2, 11 

我該如何進行查詢返回

Id, Name, Phonenumber 
1, John, 1234 
2, Mary, 5555 
3, Michael, NULL 

這是我到目前爲止。

SELECT u.Id, u.Name, p.Phonenumber 
FROM dbo.Users as u 
LEFT JOIN dbo.Phones as p 
-- Something 
關係表作爲用戶和電話表之間這裏的中間人的

SQL Fiddle

+0

是否有PK/FK關係設置?並不重要,但應該有。 – SQLMason

+0

是,設置PK/FK。 FK在關係表和PK在用戶和電話表上。 – Pegaz

回答

4

思考。這是一張帶有映射表的many-to-many relationship。加入你的用戶的關係,然後與你的手機的關係。

SELECT u.Id 
    ,u.Name 
    ,p.PhoneNumber 
FROM dbo.Users u 
LEFT JOIN dbo.Relationship r ON r.Id = u.Id 
LEFT JOIN dbo.Phones p ON p.Id = r.ChildId 

它這樣想:

用戶:你好關係,我有用戶ID = 1,我有什麼PhoneIds該用戶ID?

關係:嗨用戶。我有PhoneId = 10給你。我會去和電話交談,看看這個號碼是什麼。

電話:嗨關係!我有PhoneNumber 1234給你。它與您給我的PhoneId相匹配。

+1

作爲一個獎勵閱讀此頁面http://www.sql-join.com/ :) – AddcitedToLearn

+1

感謝您的偉大解釋justiceorjustus和感謝額外閱讀AddcitedToLearn! – Pegaz

+0

@Pegaz很高興我能幫到你。 :) – justiceorjustus

-2

加入他們的ID field.I將內部聯接根據需求

SELECT distinct u.Id, u.Name, p.Phonenumber 
FROM dbo.Users as u 
LEFT JOIN dbo.Phones as p on u.id = p.id 

或---

SELECT distinct u.Id, u.Name, p.Phonenumber 
    FROM dbo.Users as u 
    inner join T JOIN dbo.Phones as p on u.id = p.id 
    inner join dbo.relationship r on r.id = u.id 
where---- 
+0

可能需要一個'LEFT JOIN'而不是'INNER JOIN',以防記錄不存在(顯示用戶不帶電話號碼) – SQLMason

+0

@sqlmason沒有在實際問題中提到消除沒有電話號碼的用戶,我假設給予多樣的聯接有助於理解新手以便更好地理解。無論如何,謝謝 –

+0

'3,Michael,NULL'您的查詢不會顯示此預期記錄。 – SQLMason

-1

嘗試使用此:

Select u.Id, u.Name, p.Phonenumber 
From 
Users u 
Left join Relationship r on r.Id = u.Id 
Left join Phones p on r.ChildId = p.Phonenumber