SQL:如何实现泛型类?
问题描述:
我需要在SQL中实现如下分类:SQL:如何实现泛型类?
- 组可以包含多个测试或多个(孩子)组
- 测试可以在多个组
- (子)组可以在多个(父)groups
...这意味着2 x M:N关系。下面的表格可以存储组树:
TEST_TABLE
为test_id(PK),TEST_NAME
GROUP_TABLE
GROUP_ID(PK),组名
TEST_IN_GROUP_TABLE
为test_id(FK ),group_id(fk)
GROUP_RELATIONS_TABLE
parent_group_id(FK),child_group_id(FK)
但是:
- 如何列出组中的所有测试?这对我来说听起来很难,因为小组可能包含测试或其他测试的子小组。
- 或者如何修改表以使这样的SELECT成为可能?我可以在GROUP_TABLE中创建更多child_count列。它将被触发器自动填充。但即使如此,这对我来说也很难。
答
您可以使用公共表表达式首先建立所寻找的组的group_id,然后使用该单一的组列表通过TEST_IN_GROUP_TABLE连接到所有测试的测试表。
;with cte as (
select group_id
from GROUP_TABLE
where group_id = 1
union all
select child_group_id
from GROUP_RELATIONS_TABLE
inner join cte on cte.group_id = GROUP_RELATIONS_TABLE.parent_group_id
)
select t.*
from cte
inner join TEST_IN_GROUP_TABLE tg on tg.group_id = cte.group_id
inner join TEST_TABLE t on t.test_id = tg.test_id
+0
我验证了它,它的工作原理。谢谢。 – jing 2011-03-21 10:53:53
哪个版本的SQL Server? – RichardTheKiwi 2011-03-17 07:30:48
数据库可能位于MS SQL Server 2008 R2上。 (我在逻辑模型中,我会稍后做物理模型)。 – jing 2011-03-17 07:37:58
然后设计很好。测试组和1-M:M-1桥接表是正确的,层次表组关系也是如此。 – RichardTheKiwi 2011-03-17 07:40:48