用一个例子给CSDN里提问的朋友,解答一下树形结构的其他数据库的实现
数据就比如是Oracle里面的实例方案,employees表。
Oracle里是这样写:
select * from employees
start with employee_id=176 connect by prior manager_id=employee_id;
不过这个是Oracle数据库里实现的。如果我要查询一个节点的所有祖先(上级)节点,自定义一个递归查询应该怎么写?因为考虑到以后要移植。
如果你的表设计的不错的话, 由孩子找所有的父记录也是可以做到的。
比如我们现在在表里的设计加上了一个pathinfo, 或者叫hierarchy的字段这个字段是表示这个节点的路径的
比如TableA
id pid pathinfo
1 1
2 1 1,2
3 2 1,2,3
4 2 1,2,4
5 3 1,2,3,5
这里可以用类似
select a2.id from tablea a1, tablea a2 where instr(a1.pathinfo||',', a2.id||',', 1, 1) > 0
来查到所有的父亲,不过这里instr也不是标准的sql,不同的数据库instr可能是不一样的名字。