4

我敢肯定这很容易,但我在数据库方面很差......

我在access 2003中有下表:

title        |     id
/root        |      1
/root/x      |      2
/root/x/y    |      3
/root/x/y/z  |      4
/root/x/a    |      5
/root/x/a/b  |      6

即一堆节点和id号——你可以看到/root/x是/root/x/y的父级。我想创建另一个表,其中包含所有节点的列表,以及他们父母的 id。IE:

id  | parent id
1   |   -
2   |   1
3   |   2
4   |   3
5   |   2
6   |   5

以下将为我提供父级的 id 和值:

select id, left(c.title, instrrev(c.title, "/")-1)  as parentValue from nodeIDs

产量

id |  parentNode
1  |
2  |  /root 
3  |  /root/x 
4  |  /root/x/y
5  |  /root/x
6  |  /root/x/a

返回那些父节点的 id 而不是它们的值,即在最后一个表中返回 '1' 而不是 '/root' 需要什么额外的步骤?

非常感谢

4

2 回答 2

2

可能是这样的:

select c.id, 
left(c.title, instrrev(c.title, "/")-1)  as parentValue
, p.id as parentID
from nodeIDs c
left join
nodeIDs p
on left(c.title, instrrev(c.title, "/")-1) = p.title
于 2012-10-11T11:34:58.223 回答
0

我想是这样的。

select t1.id, 
       left(t1.title, instrrev(t1.title, "/")-1)  as parentNode,
       t2.id as parentID
from nodeIDs t1
inner join nodeIDs t2 on (left(t1.title, instrrev(t1.title, "/")-1)) = t2.title

我没有任何简单的方法来测试这个。但基本思想是,在导出父节点的标题后,您可以对其进行内部连接以获取关联的 ID 号。

于 2012-10-11T11:35:16.577 回答