0

次のようなネストされた組織のセットがあります (ノードは組織 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
4

1 に答える 1

0

node の子孫でも先祖でもないノードを検索します1234

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
---     )
;  
于 2012-07-09T15:15:50.850 に答える