连接自引用表
本文关键字:自引用 连接 | 更新日期: 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