一尘不染

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

sql

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


阅读 171

收藏
2021-03-08

共1个答案

一尘不染

在这里,将“关系”表视为“用户”和“电话”表之间的中间人。它与映射表是多对多关系。将您的用户加入到关系中,然后将其加入到您的电话中。

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

可以这样想:

用户: 您好关系,我的UserId = 1,我对那个UserId有什么电话ID?

关系: 嗨,用户。我的PhoneId = 10。我将与电话交谈,看看电话号码是多少。

电话: 嗨,人际关系!我有适合您的PhoneNumber 1234。它与您给我的PhoneId匹配。

2021-03-08