【发布时间】:2011-10-20 16:41:54
【问题描述】:
我有一张表,用于存储我们组织中工作组的层次结构。它看起来像:
CREATE TABLE WORKGROUPS (
WORKGROUPID NUMBER NULL,
NAME VARCHAR2(100) NOT NULL,
PARENTWORKGROUPID NUMBER NOT NULL,
WORKGROUPLEVEL CHAR(1) DEFAULT 1 NOT NULL,
CONSTRAINT WORKGROUPS_PK PRIMARY KEY(WORKGROUPID)
)
例如,工作组的深度可能有三层:
ID 1 - Sales (PARENTWORKGROUPID = 0)
ID 2 - Business Sales (PARENTWORKGROUPID = 1)
ID 3 - West Coast B2B (PARENTWORKGROUPID = 2)
所以 3 的父级是 2,2 的父级是 1,而 1 是没有父级的顶级工作组,所以我们使用 0。
现在我们有一个任务表。每个 TASKS 行都有一个 WORKGROUPID 列,该列指向 WORKGROUPS 表中的一个 WORKGROUPID。
我需要编写一个查询来返回给定顶级工作组下的所有任务,例如销售下的所有内容(在上面的示例中,可能是 WORKGROUPIDs 1、2 或 3。基本上,它是一个递归查询。
我可以想出一些方法来使用 LEFT JOIN 来检查每个级别,但我宁愿远离硬编码级别数的解决方案,因为数据库旨在允许任意数量的层。我能想到的任何其他解决方案都涉及更改表模式,我目前无法这样做。有任何想法吗?谢谢!
【问题讨论】:
标签: sql database oracle oracle11g