SUB-TREE ภายในต้นไม้ใน MySQL
ใน MYSQL ของDatabase COMPANY
ฉันฉันมีความTable: Employee
สัมพันธ์แบบวนซ้ำพนักงานสามารถเป็นหัวหน้าของพนักงานคนอื่นได้ A self relationship of kind (SuperVisor (1)- SuperVisee (∞) )
.
แบบสอบถามเพื่อสร้างตาราง:
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;
ฉันได้แทรกชุดของ tuples (ข้อความค้นหา):
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")
แถวที่แทรกมีการติดตามทรีแบบลำดับชั้น :
A <---ROOT-OWNER
/|\
/ A \
B F
//| \ \
// | \ K
/ | | \
I L H C
/ | / \
J G D E
ฉันเขียนแบบสอบถามเพื่อค้นหาความสัมพันธ์:
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;
และผลลัพธ์คือ:
+------------+------------+----------+
| 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)
[ คำถาม ]
แทนต้นไม้ลำดับชั้นที่สมบูรณ์ฉันต้องการ a SUB-TREE
จากจุด (เลือก) เช่น:
ถ้าอาร์กิวเมนต์อินพุตเป็นB
เอาต์พุตก็ควรเป็นด้านล่าง ...
+------------+------------+----------+
| SuperVisor | SuperVisee | COUNT(*) |
+------------+------------+----------+
| B | C,H,I,L | 4 |
| C | D,E | 2 |
| H | G | 1 |
| I | J | 1 |
+------------+------------+----------+
โปรดช่วยฉันในเรื่องนี้ หากไม่ใช่แบบสอบถามขั้นตอนการจัดเก็บอาจมีประโยชน์
ฉันพยายาม แต่ความพยายามทั้งหมดไร้ประโยชน์!
It my experience
ฉันได้รับคำตอบที่ดีกว่าจากผู้เชี่ยวชาญเสมอ และฉันคิดว่าเป็นการดีกว่าที่จะย้ายคำถามไปยังผู้ดูแลฐานข้อมูล ในทุกกรณีฉันรู้สึกขอบคุณมากกับ stackoverflow และผู้ใช้ที่นี่ ฉันได้รับการแก้ไขปัญหามากมายที่หาตัวเองหรือเว็บอื่น ๆ ได้ยากมาก