我有两个共享多对多关系的表。这些关系存储在第三个表中。
CREATE TABLE Person
(
Id int NOT NULL,
Name varchar(255) NOT NULL,
PRIMARY KEY (Id)
)
CREATE TABLE Filenodes
(
Id hierarchyid NOT NULL,
Name varchar(255) NOT NULL,
PRIMARY KEY (Id)
)
CREATE TABLE PersonFilenodes
(
FileId hierarchyid NOT NULL,
PersonId int NOT NULL,
PRIMARY KEY (FileId, PersonId)
)
我需要选择属于一个人的所有文件节点,以及作为这些文件祖先的所有文件。
我知道如何选择Filenodes
属于给定人的所有:
SELECT Id, Name
FROM PersonFilenodes
JOIN Filenodes on Filenodes.Id = PersonFilenodes.FileId
WHERE Id = @personId
感谢marc_s,我也知道如何选择给定文件节点的所有祖先:
SELECT Id, Name
FROM Filenodes
WHERE @filenodeId.IsDescendantOf(Id) = 1
我只是不知道如何组合这两个查询来获得我需要的结果集。如何选择属于某个人的所有文件节点,以及作为这些文件祖先的所有文件?
我认为你需要:
内部查询是一个相关的子查询,它有两个参数:
@personId
,它是一个实际参数,以及f.Id
,它是来自外部查询的当前行的文件节点 ID。