通用递归sql查询
如果有一个表包含两列,ParentId和ChildId,并且可以有多个级别,如下表所示通用递归sql查询,sql,database,oracle,Sql,Database,Oracle,如果有一个表包含两列,ParentId和ChildId,并且可以有多个级别,如下表所示 ParentId ChildId -1 1 -1 2 1 3 3 4 4 5 如果子级没有父级,则用-1表示 现在,如果我需要最高级别的父对象,比如说5,那么它的父对象是4,谁的父对象是3,谁的父对象是1。因此,1是答案,因为它的父项=-1 我在一
ParentId ChildId
-1 1
-1 2
1 3
3 4
4 5
如果子级没有父级,则用-1表示
现在,如果我需要最高级别的父对象,比如说5,那么它的父对象是4,谁的父对象是3,谁的父对象是1。因此,1是答案,因为它的父项=-1
我在一次会议上进行了讨论,似乎很复杂
通过谷歌搜索,我知道我们可以使用AS和UNION来实现这一点,有谁能解释一下一个通用的sql可以得到这个结果吗
谢谢
诺西布
您希望SQL语句返回的确切输出是什么?您想要整个层次结构吗?还是仅仅是最高级别的家长?如果你想要层次结构,你想要什么格式?多行?连接的格式化字符串?还有别的吗?@Justin:只是最高级别的parentID,您希望SQL语句返回的输出究竟是什么?您想要整个层次结构吗?还是仅仅是最高级别的家长?如果你想要层次结构,你想要什么格式?多行?连接的格式化字符串?还有别的吗?@Justin:只是最高级别家长的身份证谢谢你,伊戈尔。这对于sql开发人员来说效果很好,但通过使用以下代码的应用程序,它会抛出一个异常:SQLCODE=-313,SQLSTATE=07004Properties-props=new Properties();props.setProperty(“用户”,用户名);props.setProperty(“密码”,password);连接conn=null;conn=DriverManager.getConnection(url、道具);语句Statement=conn.createStatement();语句.executeQuery(“从t中选择connect_by_root(ChildId),其中ChildId=5,以ParentId=-1开始,connect by ParentId=prior ChildId”)@Nohsib-尝试为专栏添加别名(请参阅我的更新答案)。@Egor:仍然没有运气:(相同)exception@Nohsib-1)您能否成功执行从双通道中选择虚拟通道?2)
t
是您的表的真实名称吗?3) 尝试将schema name作为表名的前缀:schema.t
Thankyou Egor。这对于sql开发人员来说效果很好,但通过使用以下代码的应用程序,它会抛出一个异常:SQLCODE=-313,SQLSTATE=07004Properties-props=new Properties();props.setProperty(“用户”,用户名);props.setProperty(“密码”,password);连接conn=null;conn=DriverManager.getConnection(url、道具);语句Statement=conn.createStatement();语句.executeQuery(“从t中选择connect_by_root(ChildId),其中ChildId=5,以ParentId=-1开始,connect by ParentId=prior ChildId”)@Nohsib-尝试为专栏添加别名(请参阅我的更新答案)。@Egor:仍然没有运气:(相同)exception@Nohsib-1)您能否成功执行从双通道中选择虚拟通道?2) t
是您的表的真实名称吗?3) 尝试将架构名称前缀为表名称:schema.t
select connect_by_root(ChildId) as id
from t
where ChildId = 5
start with ParentId = -1
connect by ParentId = prior ChildId