2

我在德比有一张桌子:

CREATE TABLE IMPORT_RULES (
   RULEID    INTEGER NOT NULL,
   PARENTID  INTEGER,
   NAME      VARCHAR(25) NOT NULL,
   PRIMARY KEY (RULEID)
)

PARENTID是父级的RULEID,但是父子关系的深度是未知的。

我的目标是创建一个DefaultMutableTreeNode代表分层数据的。

我的想法是,最好的方法是使用 SQL 查询返回数据库中每个项目的“级别”,然后从最低级别向后循环到最高级别。

我的问题是我似乎无法为 Derby 提出上述查询。

关于如何生成此查询或以其他方式实现目标的任何想法?

4

2 回答 2

1

如果H2 数据库是可接受的替代方案,它支持Recursive Queries。另请参阅有关自定义树模型的此答案。

于 2013-01-30T08:52:40.647 回答
0

我认为不会有一个单一的查询可以实现您的目标。如果有,它一定在我头上。就性能而言,最有效的方法是将“深度”保存在单独的表中不是很好。简单地说,您将树节点数据保存在 IMPORT_RULES 表中,并将每个节点的深度保存在单独的表中,例如 IMPORT_RULE_LEVEL,它保存节点 ID 和与全局根节点相关的深度。

但显然,如果您在分支中间插入一个新节点,有时您可能需要进行批量更新。如果您需要做的所有逻辑只是附加子节点,那么单独的表将是一个不错的选择。

于 2013-01-30T03:08:50.637 回答