SUB-TREE ALL'INTERNO DI UN ALBERO in MySQL
Nel mio MYSQL Database COMPANY
, ho Table: Employee
un'associazione ricorsiva, un dipendente può essere capo di un altro dipendente. A self relationship of kind (SuperVisor (1)- SuperVisee (∞) )
.
Query per creare una tabella:
CREATE TABLE IF NOT EXISTS `Employee` (
`SSN` varchar(64) NOT NULL,
`Name` varchar(64) DEFAULT NULL,
`Designation` varchar(128) NOT NULL,
`MSSN` varchar(64) NOT NULL,
PRIMARY KEY (`SSN`),
CONSTRAINT `FK_Manager_Employee`
FOREIGN KEY (`MSSN`) REFERENCES Employee(SSN)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Ho inserito una serie di tuple (query):
INSERT INTO Employee VALUES
("1", "A", "OWNER", "1"),
("2", "B", "BOSS", "1"), # Employees under OWNER
("3", "F", "BOSS", "1"),
("4", "C", "BOSS", "2"), # Employees under B
("5", "H", "BOSS", "2"),
("6", "L", "WORKER", "2"),
("7", "I", "BOSS", "2"),
# Remaining Leaf nodes
("8", "K", "WORKER", "3"), # Employee under F
("9", "J", "WORKER", "7"), # Employee under I
("10","G", "WORKER", "5"), # Employee under H
("11","D", "WORKER", "4"), # Employee under C
("12","E", "WORKER", "4")
Le righe inserite hanno la seguente relazione gerarchica-albero :
A <---ROOT-OWNER
/|\
/ A \
B F
//| \ \
// | \ K
/ | | \
I L H C
/ | / \
J G D E
Ho scritto una query per trovare una relazione:
SELECT SUPERVISOR.name AS SuperVisor,
GROUP_CONCAT(SUPERVISEE.name ORDER BY SUPERVISEE.name ) AS SuperVisee,
COUNT(*)
FROM Employee AS SUPERVISOR
INNER JOIN Employee SUPERVISEE ON SUPERVISOR.SSN = SUPERVISEE.MSSN
GROUP BY SuperVisor;
E l'output è:
+------------+------------+----------+
| SuperVisor | SuperVisee | COUNT(*) |
+------------+------------+----------+
| A | A,B,F | 3 |
| B | C,H,I,L | 4 |
| C | D,E | 2 |
| F | K | 1 |
| H | G | 1 |
| I | J | 1 |
+------------+------------+----------+
6 rows in set (0.00 sec)
[ DOMANDA ]
Invece di completare l'albero gerarchico, ho bisogno SUB-TREE
di un punto (selettivo), ad esempio:
se l'argomento di input è, l' B
output dovrebbe essere come sotto ...
+------------+------------+----------+
| SuperVisor | SuperVisee | COUNT(*) |
+------------+------------+----------+
| B | C,H,I,L | 4 |
| C | D,E | 2 |
| H | G | 1 |
| I | J | 1 |
+------------+------------+----------+
Per favore, aiutatemi su questo. In caso contrario, una procedura memorizzata può essere utile.
Ci ho provato, ma tutti gli sforzi erano inutili!
It my experience
Ho sempre avuto una risposta migliore da parte di esperti . E penso che sia stata una decisione migliore spostare la domanda agli amministratori del database. In tutti i casi, sono molto grato a StackOverflow e alle persone che sono attive qui. Ho davvero trovato una soluzione per molti problemi che è stato molto difficile trovare me stesso o qualsiasi altra rete.