根据关系表从多个表中获取结果

时间:2017-06-29 12:57:10

标签: sql sql-server relationship

我有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

3 个答案:

答案 0 :(得分:4)

将Relationship表视为此处用户和电话表之间的中间人。它是一个带有映射表的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

想想它:

用户: Hello Relationship,我有UserId = 1,我对UserId有什么PhoneIds?

关系:嗨用户。我有PhoneId = 10。我会和Phones谈谈,看看这个号码是什么。

手机:嗨关系!我有PhoneNumber 1234给你。它与你给我的PhoneId相匹配。

答案 1 :(得分:-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

答案 2 :(得分:-2)

将他们加入id字段。我会根据需要使用内连接

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----