假设我在sql表中有以下内容:
path
------
/
/a
/a/a
/a/b
/a/b/c
/b
我将至少标记一条路径作为排除,然后执行“选择未排除的父节点列表”查询。
各种情况的理想输出如下:
Scenario Excluded Path(s) Desired Output Remarks
1 /a /b because /a/a, /a/b, /a/b/c are children of /a
2 /b /a
3 /a/b /a because /a/a is not excluded
/b
4 /a/a /b because /a/b/c is the only child of /a/b
/a/b/c and /a/a and /a/b are children of /a
答案 0 :(得分:1)
所以要更完整地说明:
For a given path P, find top-level nodes
having any children not on path P
然而,第三和第四个期望的结果似乎不遵循这个规则,所以要么为时已晚,我不应该回答这个问题,或者规则没有明确定义。
无论如何,使用字符串在SQL中执行此操作很棘手,但我会假设它们都是一个字母并用斜杠分隔。
select left(path,1) as topNode
from theTable
where path not like '/x/y%'
group by left(path,1)
如果它们不是一个字母,我认为它们不是,我们必须检查它们是如何存储在表格中的。
答案 1 :(得分:0)
如果我理解你,你的问题与“节点”和“路径”几乎没有关系。您只是在寻找不以指定前缀开头的字符串(路径)。 如果是这样,问题很简单,请查看here。