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;
튜플 세트 (쿼리)를 삽입했습니다.
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")
삽입 된 행은 다음 Tree-Hierarchical-Relationship입니다 .
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)
[ 질문 ]
완전한 계층 트리 대신, 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
나는 항상 전문가 쪽에서 더 나은 답변을 얻었다 . 그리고 질문을 데이터베이스 관리자에게 옮기는 것이 더 나은 결정이라고 생각합니다. 모든 경우에, 나는 스택 오버 플로우와 여기에 활동하는 사람들에게 매우 감사합니다. 나 자신이나 다른 웹을 찾기가 매우 어려운 많은 문제에 대한 해결책을 얻었습니다.