Выбор родительского узла неисключенных путей на основе исключенных путей - PullRequest
0 голосов
/ 03 февраля 2011

Предположим, у меня есть следующее в таблице 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

Ответы [ 2 ]

1 голос
/ 03 февраля 2011

Итак, чтобы сформулировать это более полно:

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)

Если онини одной буквы, которая, как я полагаю, не является, мы должны проверить, как они хранятся в таблице.

0 голосов
/ 03 февраля 2011

Если я правильно вас понял, ваша проблема имеет мало отношения к "узлам" и "путям". Вы просто ищете строки (пути), которые НЕ начинаются с указанного префикса. Если это так, проблема проста, посмотрите здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...