MySQL嵌套集非子关系

MySQL嵌套集非子关系,mysql,sql,nested-sets,Mysql,Sql,Nested Sets,我有一组嵌套的组织,看起来像这样。节点是组织ID: 1234是4499和3322的父母,但9905与1234有关联,而不是真正的父母或孩子 我认为leftedge和rightedge设置应该类似于: orgID | leftedge | rightedge 1234 | 1 | 6 4499 | 2 | 3 3322 | 4 | 5 9905 | 7 | 8 由于9905并不是1234的孩子,我不确定如何才

我有一组嵌套的组织,看起来像这样。节点是组织ID:

1234是4499和3322的父母,但9905与1234有关联,而不是真正的父母或孩子

我认为leftedge和rightedge设置应该类似于:

orgID | leftedge | rightedge
1234  |   1      |    6
4499  |   2      |    3
3322  |   4      |    5
9905  |   7      |    8
由于9905并不是1234的孩子,我不确定如何才能理解1234和9905之间的关系。我用于获取子关系的SQL是:

SELECT ost.orgid, ost.leftedge, ost.rightedge
  FROM tbl_organisationsettree ost 
  JOIN tbl_organisationsettree AS child_ost ON child_ost.leftedge BETWEEN ost.leftedge AND ost.rightedge 
   AND child_ost.supersetid = ost.supersetid 
 WHERE 1 
   AND ost.leftedge > 1 
   AND ost.rightedge <6 
GROUP BY child_ost.ID 
HAVING COUNT(child_ost.ID) = 1

查找不是节点1234的descedant或祖先的任何节点:


您是否有可用的关系类型?这将帮助您识别差异。由于我是一名oracle人员,我要提醒大家,这是那个世界上的一个连接问题。我还没有可用的关系类型,但由于我正在原型化这个系统,我可以添加一个。我应该把它添加到我的orsettree表中吗?还将通过另一种方式读取连接,从9905返回4499、3322和1234,使用not exists表示不返回任何内容。关于这个问题有什么指导吗?我意识到我当然可以在水平上搜索,不知道其他人,尽管他们可能没有水平记录
SELECT ost.*     --- whatever from `org` table
FROM tbl_organisationsettree AS ost 
   JOIN tbl_organisationsettree AS param
      ON  param.leftedge NOT BETWEEN ost.leftedge 
                                 AND ost.rightedge
      AND ost.leftedge NOT BETWEEN param.leftedge 
                               AND param.rightedge
WHERE param.orgID = 1234 

--- if you only root nodes:
---
--- AND NOT EXISTS 
---     ( SELECT *
---       FROM tbl_organisationsettree AS parent
---       WHERE ost.leftedge > parent.leftedge 
---         AND ost.leftedge < parent.rightedge
---     )
;