2013-03-20 182 views
1

如果是作为2列,和的ParentId和childID的可能有多个层次,如见下表通用递归SQL查询

ParentId ChildId 
    -1    1 
    -1    2 
    1    3 
    3    4 
    4    5 

如果孩子没有父母它是由-1表示的表格中。

现在,如果我需要父母在最顶层的说5,那么它的父母是4谁的父母是3谁的父母是1.所以1是答案作为其父= -1。

我经历了Sql server CTE and recursion example的讨论,看起来很复杂。

从谷歌搜索我知道我们可以使用WITH AS和UNION来实现这一目标,任何人都可以点亮一个通用的SQL,可以得到这个结果吗?

感谢

Nohsib

+0

到底是什么,你想要的SQL语句返回的输出?你想要整个层次吗?或者只是最高层的家长?如果你想要层次结构,你需要什么格式?多行?串联的格式化字符串?还有别的吗? – 2013-03-20 22:33:38

+0

@贾斯汀:只是最高级别家长的编号 – Nohsib 2013-03-20 23:37:59

回答

4
+0

谢谢叶戈尔。这从sql开发人员工作正常,但通过使用下面的代码的应用程序它射出异常与SQLCODE = -313,SQLSTATE = 07004 – Nohsib 2013-03-21 03:46:16

+0

属性props = new Properties(); \t \t props.setProperty(“user”,username); \t \t props.setProperty(“password”,password); \t \t Connection conn = null; \t \t conn = DriverManager.getConnection(url,props); \t \t Statement statement = conn.createStatement(); \t \t \t语句.executeQuery( \t \t “选择CONNECT_BY_ROOT(childID的)从t其中childID的= 5开始与的ParentId = -1通过的ParentId =事先childID的连接”); – Nohsib 2013-03-21 03:49:12

+0

@Nohsib - 尝试为列添加别名(请参阅我更新的答案)。 – 2013-03-21 13:34:21