连接自引用表

本文关键字:自引用 连接 | 更新日期: 2023-09-27 18:11:28

我有以下自引用表

Name    | Id |CategoryId
--------------------------------
Gruop1  | 1  |null
--------------------------------
Group2  | 2  | 1
--------------------------------
Group3  | 3  | 1
--------------------------------
Id=int AtuoNumber  
CategoryId=int nullable 

我需要查询它的结果是这样的 (linq to sql或sql命令)

Name   | Id | CategoryId  | CategoryName
---------------------------------------------------------
Gruop1 | 1  | null        | null
---------------------------------------------------------
Group2 | 2  | 1           | Group1
 ---------------------------------------------------------
Group3 | 3  | 1           | Group1
---------------------------------------------------------

我试过这个代码,但是它不能正常工作

SELECT *
 FROM   Category e1 
   inner join  Category e2 
   ON e1.Id = e2.CategoryId

任何想法?

连接自引用表

SELECT e1.name,e1.id,e1.categoryid,e2.name as categoryname
 FROM   Category e1 
   left join  Category e2 
   ON e2.id = e1.CategoryId

我猜你错过了空值行(其中CategoryId为空)。这是因为在任何RDBMS中,任何与NULL的比较总是返回false,即使您将NULL与NULL进行比较。

要得到您想要的,我认为您需要一个UNION查询,UNION的第二部分选择CategoryId为null的行

SELECT e1.Name , e1.Id , e1.CategoryId, e2.Name as CategoryName
FROM Category AS e1 INNER JOIN Category AS e2 ON e1.id = e2.CategoryId
union 
SELECT e1.Name , e1.Id , e1.CategoryId,null as CategoryName
FROM Category e1  where CategoryId is null

这个可以帮你完成这项工作。

声明@temp表([Id] [int] IDENTITY(1,1),[CategoryId] [int] NULL,名字varchar (20))


insert into @temp(CategoryId, Name)值(零,Group1),(1, ' Group2 '),(1, ' Group3 ')


选择t1.Name t1.Id、t1.CategoryId t2.Name来自@temp t1左外连接@temp t2在t1上。CategoryId = t2。div Id