SUB-TREE TRONG MỘT TREE trong MySQL
Trong MYSQL của tôi Database COMPANY
, tôi có một Table: Employee
hiệp hội đệ quy, một nhân viên có thể là ông chủ của nhân viên khác. A self relationship of kind (SuperVisor (1)- SuperVisee (∞) )
.
Truy vấn để tạo bảng:
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;
Tôi đã chèn một bộ tuples (Truy vấn):
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")
Các hàng được chèn có theo Mối quan hệ phân cấp cây :
A <---ROOT-OWNER
/|\
/ A \
B F
//| \ \
// | \ K
/ | | \
I L H C
/ | / \
J G D E
Tôi đã viết một truy vấn để tìm mối quan hệ:
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;
Và đầu ra là:
+------------+------------+----------+
| 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)
[ HỎI ]
Thay vì hoàn thành Cây phân cấp, tôi cần SUB-TREE
một điểm (chọn lọc), vd:
Nếu đối số đầu vào là B
đầu ra thì nên như dưới đây ...
+------------+------------+----------+
| SuperVisor | SuperVisee | COUNT(*) |
+------------+------------+----------+
| B | C,H,I,L | 4 |
| C | D,E | 2 |
| H | G | 1 |
| I | J | 1 |
+------------+------------+----------+
Xin hãy giúp tôi về điều này. Nếu không truy vấn, một thủ tục được lưu trữ có thể hữu ích.
Tôi đã cố gắng, nhưng mọi nỗ lực đều vô ích!
It my experience
Tôi luôn nhận được câu trả lời tốt hơn từ các chuyên gia . Và tôi nghĩ rằng đó là quyết định tốt hơn để chuyển câu hỏi đến Quản trị viên Cơ sở dữ liệu. Trong tất cả các trường hợp, tôi rất biết ơn stackoverflow và những người đang hoạt động ở đây. Tôi thực sự có giải pháp cho nhiều vấn đề rất khó tìm thấy bản thân hoặc bất kỳ trang web nào khác.