假设我有一个名为“ species”的表,该表包含3列:“ Id”,“ ancestorId”和“ name”。“ ancestorId”是祖先物种的“ Id”,因此,例如,如果高智人的祖先是南方古猿,而南方古猿的“ Id”是5,那么高智人的“祖先Id”是5。有一个名为“第一类”的物种,其“ Id”为0或为null。所以我想要的是从一个特定物种(例如,智人)到“第一物种”中选择一个祖先列表,无论途中有多少个节点。SQL可能吗?
ANSI方法是使用递归WITH子句:
WITH hierarchy AS ( SELECT t.id, t.name, t.ancestor FROM TABLE t WHERE t.ancestor IS NULL UNION SELECT t.id, t.name, t.ancestor FROM TABLE t JOIN hierarchy h ON h.ancestorid = t.id) SELECT * FROM hierarchy
支持:
从v2开始,Oracle使用CONNECT BY语法提供了分层查询支持。
CONNECT BY