多个表的递归查询

时间:2018-05-19 03:54:08

标签: sql sql-server

在SQL Server表OBJECTS中,某些对象是从另一个对象派生的,并且它可能无限多层深。另一个表包含对象的ATTRIBUTES,但它列出了主(父)对象的属性,但没有列出其派生对象的属性。我正在寻找一种方法来获取具有特定属性的所有对象(可能导出也可能不导出)?

我认为公用表表达式(递归查询)是要走的路,但我不明白如何使用它。

DDL:

CREATE TABLE OBJECTS    
(
     [ID] INT,
     [PARENTID] INT, 
     [ObjectName] VARCHAR(32)
);    

INSERT INTO OBJECTS ([ID], [PARENTID], [ObjectName])
VALUES
    (1, 0, 'Parent1'),
    (2, 1, 'Parent2'),
    (3, 1, 'Item1'),
    (4, 1, 'Item2'),
    (5, 2, 'Item3'),
    (6, 0, 'Item4'),
    (7, 0, 'Item5');

CREATE TABLE ATTRIBUTES
(
     [ID] INT, 
     [AttributeName] VARCHAR(1)
);    

INSERT INTO ATTRIBUTES ([ID], [AttributeName])
VALUES
    (1, 'A'),
    (1, 'B'),
    (2, 'C'),
    (2, 'D'),
    (3, 'F'),
    (6, 'C'),
    (7, 'A');

示例问题:如何列出所有对象(本地'以及从父对象派生)的属性为' A'?

期望的输出:

ID  OBJECTNAME
---------------
1   Parent1
2   Parent2
3   Item1
4   Item2
5   Item3
7   Item5

1 个答案:

答案 0 :(得分:0)

<textarea style="font-family:monospace;">      |
中文字|
123456|
Englis|</textarea>