从两个递归集中查询表

时间:2015-06-01 19:10:06

标签: sql sql-server tsql

我有三张桌子:

CREATE TABLE [dbo].[Template](
    [ID] [bigint] IDENTITY(1,1) NOT NULL,
    [Name] [text] NOT NULL,
    [ParentTemplateID] [bigint] NULL);
CREATE TABLE [dbo].[Office](
    [ID] [bigint] IDENTITY(1,1) NOT NULL,
    [ParentOfficeID] [bigint] NULL,
    [Name] [text] NOT NULL);
CREATE TABLE [dbo].[TemplatePublish](
    [ID] [bigint] IDENTITY(1,1) NOT NULL,
    [TemplateID] [bigint] NOT NULL,
    [OfficeID] [bigint] NOT NULL);

这里有两个主要实体 - Office和Template。与OOP非常相似,办公室和模板可以分别从父办公室或模板继承。如果将模板分配给父办公室,则所有儿童办公室都应该可以使用该模板。模板和办公室可以有无限数量的嵌套。

问题是,假设我拥有特定子办公室的主键,并且我想知道该办公室可以使用哪些模板,不仅包括专门分配给该办公室的模板,还包括任何父办公室。有没有办法在SQL Server中执行此操作?

1 个答案:

答案 0 :(得分:0)

我认为您正在寻找的是递归CTE(公用表表达式)。它也称为迭代CTE。 (因为它并不完全使用递归。但它已足够接近。)查看this article解释如何使用此功能。