我在 SQL Server 中有一些分层类别,定义如下:
CREATE TABLE [dbo].[CategoryDesc] (
[CategoryId] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](255) NOT NULL
)
CREATE TABLE [dbo].[CategoryRelationship] (
[RelationshipId] [int] IDENTITY(1,1) NOT NULL,
[CategoryId] [int] NOT NULL,
[ParentId] [int] NULL
)
CREATE TABLE [dbo].[Machine] (
[MachineId] [int] IDENTITY(1,1) NOT NULL,
[Make] [varchar](50) NOT NULL,
[Model] [varchar](255) NOT NULL,
[CreateDate] [datetime] NOT NULL,
[CategoryId] [int] NOT NULL
)
注意:为简洁起见,省略了主键、关系和一些字段。
我已经使用 CTE 来生成一棵完整的树,其输出的摘录:
Foundry/Forging
Foundry/Forging > Core Equipment
Foundry/Forging > Furnaces
Foundry/Forging > Furnaces > Induction
Glass
Glass > Bevelling
Glass > Cutting
Glass > Cutting > Laminated Glass
Glass > Cutting > Manual
Glass > Cutting > Shape
Glass > Cutting > Straight
Glass > Decorating
Glass > Drilling
Glass > Drilling > Horizontal
Glass > Drilling > Vertical
etc
我需要一个给定顶级 categoryId 的查询,返回最新添加的机器(基于 CreateDate),而不管它添加了哪个子类别和在哪个级别。
我遇到的问题是机器可能被添加到第 2 或第 3 级类别(尽管从来不是顶级)并且 CTE 不允许在递归部分进行左连接。
提前感谢您提供的任何帮助。:)