什么是自我加入以及如何为超过3个表编写自联接?

时间:2016-04-09 11:06:46

标签: sql-server-2008 join

我知道内连接,左连接,右连接,外连接。 什么是自我加入? 任何人都会向我解释什么是自我加入,它使用以及在何处使用。

然后我也想知道如何使用自联接加入三个以上的表。

例如客户表

1)CustomerID uniqueidentifier主键不为null, 2)CustomerName Varchar(100), 3)CustomerTypeID uniqueidentifier null,

CustomerType

1)CustomerTypeID uniqueidentifier主键不为null 2)CustomerType varchar null

CustomerAddress表

1)CustomerAddressID uniqueidentifier主键不为null 2)CustomerID uniqueidentifier null, 3)AddressID uniqueidentifier null,

地址

1)AddressID uniqueidentifier主键不为null, 2)Street varchar(100)null, 3)位置varchar(100)null, 4)放置varchar(100),null, 5)AreaID uniqueidentifier null, 6)PinCode Varchar(100)

区域

1)AreaID uniqueidentifier主键不为null, 2)面积Varchar(100)

我在这里提一些表格。现在我想显示CustomerName,CustomerType,Street,Place,Location,Area,PinCode。现在我如何为这些表添加自联接。请任何人解释这个概念。

1 个答案:

答案 0 :(得分:0)

自我联接正在加入一个表格。这是在下面的场景中完成的 -

<强> TableProductCategory

ID     CategoryName ParentCategoryID

1      Clothes       NULL
2      Jeans         1
3      Shorts        1

因此,在这种情况下,如果您需要列出其父类别名称的类别名称,您可以使用下面的自我加入

Select A.CategoryName, B.CategoryName as ParentCategoryName
from
TableProductCategory A LEFT JOIN TableProductCategory B
on A.ParentCategoryID=B.ID

根据您的要求

  

CustomerName,CustomerType,Street,Place,Location,Area,PinCode

您需要使用下面的简单LEFT JOIN查询

Select 
C.CustomerName, 
T.CustomerType, 
A.Street, 
A.Place, 
A.Location,
AA.Area, 
A.Pincode
From 
  Customer C 
   LEFT JOIN CustomerType T on C.CustomerTypeID=T.CustomerTypeID
   LEFT JOIN CustomerAddress CA on C.CustomerID =CA.CustomerID 
   LEFT JOIN Address A on A.AddressID=CA.AddressID
   LEFT JOIN Area AA on AA.AreaID=A.AreaID