UNTERBAUM IN EINEM BAUM in MySQL
In meinem MYSQL habe Database COMPANY
ich eine Table: Employee
rekursive Assoziation, ein Mitarbeiter kann Chef eines anderen Mitarbeiters sein. A self relationship of kind (SuperVisor (1)- SuperVisee (∞) )
.
Abfrage zum Erstellen einer Tabelle:
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;
Ich habe eine Reihe von Tupeln eingefügt (Abfrage):
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")
Die eingefügten Zeilen haben folgende Baum-Hierarchie-Beziehung :
A <---ROOT-OWNER
/|\
/ A \
B F
//| \ \
// | \ K
/ | | \
I L H C
/ | / \
J G D E
Ich habe eine Anfrage geschrieben, um eine Beziehung zu finden:
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;
Und die Ausgabe ist:
+------------+------------+----------+
| 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)
[ FRAGE ]
Anstelle des vollständigen hierarchischen Baums benötige ich ein SUB-TREE
von einem Punkt (selektiv) zB:
Wenn das Eingabeargument B
dann ausgegeben wird, sollte es wie folgt aussehen ...
+------------+------------+----------+
| SuperVisor | SuperVisee | COUNT(*) |
+------------+------------+----------+
| B | C,H,I,L | 4 |
| C | D,E | 2 |
| H | G | 1 |
| I | J | 1 |
+------------+------------+----------+
Bitte helfen Sie mir dabei. Wenn dies nicht der Fall ist, kann eine gespeicherte Prozedur hilfreich sein.
Ich habe es versucht, aber alle Anstrengungen waren nutzlos!
It my experience
Ich habe immer bessere Antworten von Experten bekommen . Und ich denke, es war eine bessere Entscheidung, Fragen an Datenbankadministratoren zu übertragen. In allen Fällen bin ich Stackoverflow und den hier aktiven Leuten sehr dankbar. Ich habe wirklich eine Lösung für viele Probleme gefunden, die sehr schwierig waren, mich selbst oder ein anderes Web zu finden.