我有以下层次结构:
A -> E -> C -> D
|
|
|-> B -> D
这是我想出的关闭表:
| Ancestor | Descendant | Depth |
| A | A | 0 |
| B | B | 0 |
| C | C | 0 |
| D | D | 0 |
| E | E | 0 |
| A | E | 1 |
| A | B | 1 |
| A | C | 2 |
| E | C | 1 |
| A | D | 3 |
| E | D | 2 |
| C | D | 1 |
| A | D | 2 |
| B | D | 1 |
我想删除 and 之间的链接B
,D
因此我想删除 and 之间的链接A
(D
深度之一2
)。问题是我不想删除 和 之间的链接,A
因为D
我3
没有删除 和 之间的C
链接D
。
目前,这里是列出我要删除的链接的 SQL 语句:
SELECT link.ancestor, link.descendant, link.depth
FROM closure_table p,
closure_table link,
closure_table c
WHERE p.ancestor = link.ancestor
AND c.descendant = link.descendant
AND p.descendant = B
AND c.ancestor = D;
但是这个语句给了我不想删除的行:
| Ancestor | Descendant | Depth |
| A | D | 2 |
| A | D | 3 | <- As said before, I want to keep this one
| B | D | 1 |