Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通用递归sql查询_Sql_Database_Oracle - Fatal编程技术网

通用递归sql查询

通用递归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,并且可以有多个级别,如下表所示

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