Re: Nested sets question...

From: John Gilson <jag_at_acm.org>
Date: Fri, 26 Nov 2004 01:58:31 GMT
Message-ID: <b5wpd.27193$Vk6.23718_at_twister.nyc.rr.com>


"Brundek" <br_at_net.hr> wrote in message news:cnuuq7$nde$1_at_ls219.htnet.hr...
> How to find all children in nested sets model that are two levels under
> specified item?

CREATE TABLE Tree
(
node_name VARCHAR(10) NOT NULL PRIMARY KEY, lft INT NOT NULL UNIQUE,
rgt INT NOT NULL UNIQUE,
CHECK (rgt > lft)
)

INSERT INTO Tree (node_name, lft, rgt)
VALUES ('A', 1, 18)
INSERT INTO Tree (node_name, lft, rgt)
VALUES ('B', 2, 3)
INSERT INTO Tree (node_name, lft, rgt)
VALUES ('C', 4, 17)
INSERT INTO Tree (node_name, lft, rgt)
VALUES ('D', 5, 10)
INSERT INTO Tree (node_name, lft, rgt)
VALUES ('E', 6, 7)
INSERT INTO Tree (node_name, lft, rgt)
VALUES ('F', 8, 9)
INSERT INTO Tree (node_name, lft, rgt)
VALUES ('G', 11, 14)
INSERT INTO Tree (node_name, lft, rgt)
VALUES ('H', 12, 13)
INSERT INTO Tree (node_name, lft, rgt)
VALUES ('I', 15, 16) CREATE VIEW Children (node_name, child_node_name) AS
SELECT T1.node_name, T2.node_name
FROM Tree AS T1

            INNER JOIN
            Tree AS T2
            ON T2.lft > T1.lft AND
                   T2.rgt < T1.rgt AND
                   NOT EXISTS (SELECT *
                                           FROM Tree AS T3
                                           WHERE T3.lft > T1.lft AND
                                                          T3.lft < T2.lft AND
                                                          T3.rgt < T1.rgt AND
                                                          T3.rgt > T2.rgt)

  • Two levels down from a node are the children of its children, i.e.,
  • its grandchildren CREATE VIEW Grandchildren (node_name, grandchild_node_name) AS SELECT C1.node_name, C2.child_node_name FROM Children AS C1 INNER JOIN Children AS C2 ON C1.child_node_name = C2.node_name

SELECT node_name, grandchild_node_name
FROM Grandchildren
ORDER BY node_name, grandchild_node_name

node_name grandchild_node_name
A D
A G
A I
C E
C F
C H

--
JAG
Received on Fri Nov 26 2004 - 02:58:31 CET

Original text of this message