반응형
재귀적 CTE를 사용하여 레코드가 다른 레코드의 후손인지 확인
다음 표에는 사용 설명서의 주제가 저장되어 있습니다.레코드를 제외한 각 항목에는 상위 항목이 있습니다.id
의1
그것이 뿌리입니다.애플리케이션은 루트 토픽을 제외한 모든 토픽이 부모를 변경할 수 있도록 하고 있으며, 조상이 자신의 후손으로 할당되는 것을 방지해야 할 것입니다.
예를 들어 레코드 #2의 부모를 다음과 같이 변경해서는 안 됩니다.1
로.7
.
레코드가 다른 레코드의 후손인지 확인하려면 어떻게 해야 합니까?저는 후손들의 양을 "하드코드화"하고 싶지 않습니다.제가 mariaDB를 실제로 사용하고 있다는 것을 참고하세요.
CREATE TABLE IF NOT EXISTS `app`.`manual` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NOT NULL,
`content` TEXT NULL,
`listorder` TINYINT NULL,
`keywords` TEXT NULL,
`display_list` TINYINT NULL,
`parent_id` INT NULL,
PRIMARY KEY (`id`),
INDEX `fk_manual_manual1_idx` (`parent_id` ASC),
CONSTRAINT `fk_manual_manual1`
FOREIGN KEY (`parent_id`)
REFERENCES `app`.`manual` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
id parent_id
1 null
2 1
3 2
4 3
5 4
6 5
7 6
다음 쿼리는 다음과 같이 기록할 경우 0보다 큰 카운트를 반환합니다.id
6은 의 기록의 후예입니다.id
2의
WITH RECURSIVE ancestors AS (
SELECT * FROM manual WHERE id=2
UNION
SELECT m.*
FROM manual m
INNER JOIN ancestors a ON a.id=m.parent_id
)
SELECT COUNT(*) FROM ancestors WHERE id=6;
언급URL : https://stackoverflow.com/questions/49433253/determine-if-a-record-is-a-descendant-of-another-record-using-recursive-cte
반응형
'programing' 카테고리의 다른 글
Razor View Engine이 Mono에 적합합니까? (0) | 2023.09.14 |
---|---|
Writeline은 새 줄 없이 줄을 씁니다. 파일만 채웁니다. (0) | 2023.09.09 |
jQuery ajax 호출에서 응답 시간을 얻으려면 어떻게 해야 합니까? (0) | 2023.09.09 |
MySQL Left JOIN으로 별칭을 사용하는 방법 (0) | 2023.09.09 |
SQL 쿼리는 'like'와 함께 작동하지만 일부 ID의 경우 동등하지 않습니다. (0) | 2023.09.09 |