2012-05-14 58 views
3

我有一个SQL Server 2008数据库。这个数据库有三个表:在SQL Server 2008的多个表中使用SQL的OUTER JOIN

- Id 
    - FullName 
    - MembershipStatusId (nullable) 
    - HairStyleId (nullable) 

MembershipStatus

- Id 
    - Name 

发型

- Id 
    - ColorName 
    - Description 

我需要创建一个列出我数据库中所有人员的查询。因为MembershipStatusIdHairStyleId都可以为空,所以我知道我需要做一个左外连接。但是,因为有多个表格,我不知道该怎么做。随着一个左外连接,我知道我能做到这一点:

SELECT 
    p.*, 
    m.Name as 'MembershipStatus', 
    -- how do i include the person's hair color as part of my result set? 
FROM 
    Person p LEFT OUTER JOIN 
    MembershipStatus m ON p.[MembershipStatusId] 

但是,我不知道如何添加左外连接的发型名称。有人可以告诉我如何包括人的头发颜色?

谢谢!

+0

您的两个连接都在主键,根据迄今为止的答案,其相当简单。 (外连接开始变得棘手,你有两个或多个X对多外连接来处理。) –

回答

9

你只是另一个LEFT JOIN包括发型表

SELECT 
    p.*, 
    m.Name as 'MembershipStatus', 
    h.ColorName 
FROM Person p 
LEFT JOIN MembershipStatus m 
    ON p.[MembershipStatusId] = m. Id 
LEFT JOIN HairStyle h 
    ON p.HairStyleId = h.id 

查看SQL Fiddle

+0

如果MembershipId为null,但HairStyleId不是?它会继续工作吗?在我看来,如果MembershipStatusId为null,查询将会退出。但是,我可能会误解一些东西。 –

+0

由于它是一个外连接,所以即使它为空也应该得到结果,我使用sql小提琴演示更新了我的答案 – Taryn

1

也许是这样的一个演示:

SELECT 
    Person.id, 
    MembershipStatus.Name AS MemberShip, 
    HairStyle.ColorName AS HairStyleColorName 
FROM 
    Person 
    LEFT JOIN MembershipStatus 
     ON Person.MembershipStatusId=MembershipStatus.Id 
    LEFT JOIN HairStyle 
     ON Person.HairStyleId = HairStyle.Id