+ -
当前位置:首页 → 问答吧 → 如何遍历查询

如何遍历查询

时间:2011-12-07

来源:互联网

有表TREE,根据某ID查询其所有子节点,其中某个子节点可能在不同的父节点下出现,求SQL

下面附上表和部分数据
drop table TREE cascade constraints;
/*==============================================================*/
/* Table: TREE */
/*==============================================================*/
create table TREE (
  ID VARCHAR2(32) not null,
  PID VARCHAR2(32),
  constraint PK_TREE primary key (ID)
);

ID PID
————————————————
001
1001 !!001!!
1002 !!001!!
1003 !!001!!,!!001001!!
1004 !!001!!,!!001002!!
1005 !!001001!!,!!001002!!
1006 !!001!!,!!001002!!
1007 !!001001!!,!!001002!!

作者: happyboy1202   发布时间: 2011-12-07

不是很明白。
ID是子节点么,P_ID是父节点?

作者: yinan9   发布时间: 2011-12-07

ID是节点ID,PID是父节点编号,也就是上级节点的ID

作者: happyboy1202   发布时间: 2011-12-07

那也不对啊,1003的你结点id是什么,从数据中看不了来。

作者: LuiseRADL   发布时间: 2011-12-07

SQL code
--&ID接受输入的ID值,如:1.1001,1002
SELECT T.ID
  FROM TREE T
 WHERE INSTR(T.PID,
             CHR(33) || CHR(33) || '00' || '&ID' || CHR(33) || CHR(33),
             1) > 0;

作者: yinan9   发布时间: 2011-12-07

1003的节点id是1003,它的父节点是001和001001,也就是说1003这个节点会出现在001节点和001001节点下

作者: happyboy1202   发布时间: 2011-12-07

引用 5 楼 happyboy1202 的回复:

1003的节点id是1003,它的父节点是001和001001,也就是说1003这个节点会出现在001节点和001001节点下
上面的SQL实现不了么

作者: yinan9   发布时间: 2011-12-07

嗯,查不到数据

作者: happyboy1202   发布时间: 2011-12-07

SQL code
SQL> --&ID接受输入的ID值,如:1.1001,1002
SQL> SELECT T.ID
  2    FROM TREE T
  3   WHERE INSTR(T.PID,
  4               CHR(33) || CHR(33) || '00' || '&ID' || CHR(33) || CHR(33),
  5               1) > 0;

ID
--------------------------------
1003
1005
1007


作者: yinan9   发布时间: 2011-12-07

引用 8 楼 yinan9 的回复:

SQL code
SQL> --&ID接受输入的ID值,如:1.1001,1002
SQL> SELECT T.ID
2 FROM TREE T
3 WHERE INSTR(T.PID,
4 CHR(33) || CHR(33) || '00' || '&ID' || CHR(33) || CHR(33),
5 ……
运行时候,会要求输入值,键入1001返回如上结果

作者: yinan9   发布时间: 2011-12-07